1 |
james |
25 |
REM > BootEditCode:Boot |
2 |
|
|
|
3 |
|
|
DEF PROCBoot_Scan |
4 |
|
|
LOCAL Wide% |
5 |
|
|
|
6 |
|
|
SYS"WimpExt_MiscOp", 1 TO ,,, Wide% |
7 |
|
|
Wide% = 810 - Wide% |
8 |
|
|
|
9 |
|
|
CASE TRUE OF |
10 |
|
|
|
11 |
|
|
WHEN FNWind_GetIcon("Boot", "PreDesktop") |
12 |
|
|
Boot_Editing% = 1 |
13 |
|
|
PROCBoot_LoadFile("PreDesktop", "small_feb") |
14 |
|
|
|
15 |
|
|
WHEN FNWind_GetIcon("Boot", "PreDesk") |
16 |
|
|
Boot_Editing% = 2 |
17 |
|
|
PROCBoot_ScanDirectory("PreDesk") |
18 |
|
|
|
19 |
|
|
WHEN FNWind_GetIcon("Boot", "Desktop") |
20 |
|
|
Boot_Editing% = 3 |
21 |
|
|
PROCBoot_LoadFile("Desktop", "small_fea") |
22 |
|
|
|
23 |
|
|
WHEN FNWind_GetIcon("Boot", "Tasks") |
24 |
|
|
Boot_Editing% = 4 |
25 |
|
|
PROCBoot_ScanDirectory("Tasks") |
26 |
|
|
|
27 |
|
|
ENDCASE |
28 |
|
|
|
29 |
|
|
PROCWind_IconGrey("Boot", "Remove", 1) |
30 |
|
|
PROCWind_IconGrey("Boot", "Edit", 1) |
31 |
|
|
PROCWind_IconGrey("Boot", "Open", -(Boot_Editing% = 1 OR Boot_Editing% = 3)) |
32 |
|
|
|
33 |
|
|
IF High% < 364 THEN High% = 364 |
34 |
|
|
|
35 |
|
|
B%!400 = 0 |
36 |
|
|
B%!404 = -High% |
37 |
|
|
B%!408 = Wide% |
38 |
|
|
B%!412 = 0 |
39 |
|
|
SYS"Wimp_SetExtent", FNObject_Hand(0, "BootPane", 0), B% + 400 |
40 |
|
|
|
41 |
|
|
IF FNWind_Open("BootPane") THEN |
42 |
|
|
PROCWind_PopOpen("BootPane") |
43 |
|
|
B%!00 = FNObject_Hand(0, "BootPane", 0) |
44 |
|
|
SYS"Wimp_GetWindowState",, B% |
45 |
|
|
IF FNOpen_BootPane |
46 |
|
|
PROCWind_ForceRedraw("BootPane") |
47 |
|
|
ENDIF |
48 |
|
|
|
49 |
|
|
BootPane_Wide% = Wide% |
50 |
|
|
|
51 |
|
|
ENDPROC |
52 |
|
|
|
53 |
|
|
REM ������������������������������������������������������������������������� |
54 |
|
|
|
55 |
|
|
DEF PROCBoot_LoadFile(File$, Icon$) |
56 |
|
|
LOCAL List%, File% |
57 |
|
|
|
58 |
|
|
IF NOT(FNWimp_FileExists(Boot_Path$ + ".Choices.Boot." + File$)) THEN ERROR Erro_Warn%, "%No" + File$ |
59 |
|
|
|
60 |
|
|
LOCAL ERROR |
61 |
|
|
ON ERROR LOCAL RESTORE ERROR: PROCBoot_Error(File%) |
62 |
|
|
|
63 |
|
|
PROCHeap_Lose(0, "BootList") |
64 |
|
|
List% = FNHeap_Safe(4, 0, "BootList") |
65 |
|
|
!List% = 0 |
66 |
|
|
|
67 |
|
|
File% = OPENIN(Boot_Path$ + ".Choices.Boot." + File$) |
68 |
|
|
WHILE NOT EOF#File% |
69 |
|
|
Line$ = GET$#File% |
70 |
|
|
|
71 |
|
|
IF LEFT$(Line$, 6) = "|Start" THEN |
72 |
|
|
!List% += 1 |
73 |
|
|
IF NOT FNHeap_ReAlloc(List%, 4 + !List% * 80) THEN ERROR Erro_Memo%, "" |
74 |
|
|
List% = FNHeap_Find(0, "BootList") |
75 |
|
|
!(List% + 4 + 80 * (!List% - 1) + 00) = 0 |
76 |
|
|
$(List% + 4 + 80 * (!List% - 1) + 04) = "S" + Icon$ |
77 |
|
|
$(List% + 4 + 80 * (!List% - 1) + 20) = MID$(Line$, 8, 59) |
78 |
|
|
ENDIF |
79 |
|
|
|
80 |
|
|
ENDWHILE |
81 |
|
|
CLOSE#File% |
82 |
|
|
|
83 |
|
|
High% = !List% * List_High% |
84 |
|
|
|
85 |
|
|
ENDPROC |
86 |
|
|
|
87 |
|
|
REM ������������������������������������������������������������������������� |
88 |
|
|
|
89 |
|
|
DEF PROCBoot_Error(File%) |
90 |
|
|
PROCHeap_Lose(0, "BootList") |
91 |
|
|
Erro_ERL% = ERL |
92 |
|
|
Erro_REPORT$ = REPORT$ |
93 |
|
|
Erro_ERR% = ERR |
94 |
|
|
IF File% <> 0 THEN CLOSE#File% |
95 |
|
|
ERROR ERR, REPORT$ |
96 |
|
|
ENDPROC |
97 |
|
|
|
98 |
|
|
REM ������������������������������������������������������������������������� |
99 |
|
|
|
100 |
|
|
DEF PROCBoot_ScanDirectory(Directory$) |
101 |
|
|
LOCAL Offset%, List%, Read% |
102 |
|
|
|
103 |
|
|
IF NOT(FNWimp_FileExists(Boot_Path$ + ".Choices.Boot." + Directory$)) THEN ERROR Erro_Warn%, "%No" + Directory$ |
104 |
|
|
|
105 |
|
|
PROCHeap_Lose(0, "BootList") |
106 |
|
|
List% = FNHeap_Safe(4, 0, "BootList") |
107 |
|
|
!List% = 0 |
108 |
|
|
|
109 |
|
|
REPEAT |
110 |
|
|
SYS"OS_GBPB", 12, Boot_Path$ + ".Choices.Boot." + Directory$, B% + 400, 1, Offset%, 112 TO ,,, Read%, Offset% |
111 |
|
|
|
112 |
|
|
IF Read% = 1 THEN |
113 |
|
|
!List% += 1 |
114 |
|
|
IF NOT FNHeap_ReAlloc(List%, 4 + !List% * 80) THEN ERROR Erro_Memo%, "" |
115 |
|
|
List% = FNHeap_Find(0, "BootList") |
116 |
|
|
|
117 |
|
|
CASE B%!420 OF |
118 |
|
|
|
119 |
|
|
WHEN &1000 |
120 |
|
|
Icon$ = "small_dir" |
121 |
|
|
|
122 |
|
|
WHEN &2000 |
123 |
|
|
Icon$ = "sm" + LEFT$(FNWimp_GetString(B% + 424), 10) |
124 |
|
|
SYS"XWimp_SpriteOp", 40,, Icon$ TO ;PFlg% |
125 |
|
|
IF (PFlg% AND 1) THEN Icon$ = "small_app" |
126 |
|
|
|
127 |
|
|
OTHERWISE |
128 |
|
|
Icon$ = "small_" + RIGHT$("00" + STR$~(B%!420), 3) |
129 |
|
|
SYS"XWimp_SpriteOp", 40,, Icon$ TO ;PFlg% |
130 |
|
|
IF (PFlg% AND 1) THEN Icon$ = "small_xxx" |
131 |
|
|
|
132 |
|
|
ENDCASE |
133 |
|
|
|
134 |
|
|
!(List% + 4 + 80 * (!List% - 1) + 00) = 0 |
135 |
|
|
$(List% + 4 + 80 * (!List% - 1) + 04) = "S" + Icon$ |
136 |
|
|
$(List% + 4 + 80 * (!List% - 1) + 20) = FNWimp_GetString(B% + 424) |
137 |
|
|
ENDIF |
138 |
|
|
|
139 |
|
|
UNTIL Offset% = -1 |
140 |
|
|
|
141 |
|
|
High% = !List% * List_High% |
142 |
|
|
|
143 |
|
|
ENDPROC |
144 |
|
|
|
145 |
|
|
REM ������������������������������������������������������������������������� |
146 |
|
|
|
147 |
|
|
DEF PROCBoot_Edited(File$) |
148 |
|
|
LOCAL File%, In%, Out%, Line$, In$, Done% |
149 |
|
|
|
150 |
|
|
File% = OPENIN("Pipe:$." + File$) |
151 |
|
|
IF EOF#File% THEN ENDPROC |
152 |
|
|
Line$ = GET$#File% |
153 |
|
|
|
154 |
|
|
In% = OPENIN(Boot_Path$ + ".Choices.Boot." + File$) |
155 |
|
|
Out% = OPENOUT("<Wimp$ScrapDir>.BootEdit") |
156 |
|
|
|
157 |
|
|
WHILE NOT EOF#In% |
158 |
|
|
In$ = GET$#In% |
159 |
|
|
|
160 |
|
|
IF (In$ = Line$) AND NOT(Done%) THEN |
161 |
|
|
REPEAT |
162 |
|
|
IF In$ <> "" THEN BPUT#Out%, In$ |
163 |
|
|
In$ = GET$#File% |
164 |
|
|
UNTIL In$ = "|End" |
165 |
|
|
REPEAT |
166 |
|
|
Line$ = GET$#In% |
167 |
|
|
UNTIL Line$ = "|End" |
168 |
|
|
Done% = TRUE |
169 |
|
|
ENDIF |
170 |
|
|
|
171 |
|
|
IF In$ <> "" THEN BPUT#Out%, In$ |
172 |
|
|
ENDWHILE |
173 |
|
|
|
174 |
|
|
IF NOT Done% THEN |
175 |
|
|
BPUT#Out%, Line$ |
176 |
|
|
REPEAT |
177 |
|
|
In$ = GET$#File% |
178 |
|
|
IF In$ <> "" THEN BPUT#Out%, In$ |
179 |
|
|
UNTIL In$ = "|End" |
180 |
|
|
ENDIF |
181 |
|
|
|
182 |
|
|
CLOSE#File% |
183 |
|
|
CLOSE#In% |
184 |
|
|
CLOSE#Out% |
185 |
|
|
|
186 |
|
|
OSCLI"Copy <Wimp$ScrapDir>.BootEdit " + Boot_Path$ + ".Choices.Boot." + File$ + " ~CDFL~V" |
187 |
|
|
IF File$ = "PreDesktop" THEN |
188 |
|
|
OSCLI"SetType " + Boot_Path$ + ".Choices.Boot." + File$ + " FEB" |
189 |
|
|
ELSE |
190 |
|
|
OSCLI"SetType " + Boot_Path$ + ".Choices.Boot." + File$ + " FEA" |
191 |
|
|
ENDIF |
192 |
|
|
|
193 |
|
|
PROCBoot_Scan |
194 |
|
|
|
195 |
|
|
ENDPROC |
196 |
|
|
|
197 |
|
|
REM ������������������������������������������������������������������������� |
198 |
|
|
|
199 |
|
|
DEF PROCBoot_Remove(File$) |
200 |
|
|
LOCAL List%, Item%, In%, Out%, Line$ |
201 |
|
|
|
202 |
|
|
List% = FNHeap_Find(0, "BootList") |
203 |
|
|
|
204 |
|
|
In% = OPENIN(Boot_Path$ + ".Choices.Boot." + File$) |
205 |
|
|
Out% = OPENOUT("<Wimp$ScrapDir>.BootEdit") |
206 |
|
|
|
207 |
|
|
WHILE NOT EOF#In% |
208 |
|
|
Line$ = GET$#In% |
209 |
|
|
|
210 |
|
|
IF LEFT$(Line$, 6) = "|Start" THEN |
211 |
|
|
|
212 |
|
|
Item% = 1 |
213 |
|
|
WHILE ($(List% + 4 + 80 * (Item% - 1) + 20) <> MID$(Line$, 8)) AND (Item% <= !List%) |
214 |
|
|
Item% += 1 |
215 |
|
|
ENDWHILE |
216 |
|
|
|
217 |
|
|
IF (($(List% + 4 + 80 * (Item% - 1) + 20) = MID$(Line$, 8))) AND (!(List% + 4 + 80 * (Item% - 1) + 00) AND 1) THEN |
218 |
|
|
REPEAT |
219 |
|
|
Line$ = GET$#In% |
220 |
|
|
UNTIL Line$ = "|End" |
221 |
|
|
Line$ = GET$#In% |
222 |
|
|
ENDIF |
223 |
|
|
|
224 |
|
|
ENDIF |
225 |
|
|
|
226 |
|
|
IF Line$ <> "" THEN BPUT#Out%, Line$ |
227 |
|
|
ENDWHILE |
228 |
|
|
|
229 |
|
|
CLOSE#In% |
230 |
|
|
CLOSE#Out% |
231 |
|
|
|
232 |
|
|
OSCLI"Copy <Wimp$ScrapDir>.BootEdit " + Boot_Path$ + ".Choices.Boot." + File$ + " ~CDFL~V" |
233 |
|
|
IF File$ = "PreDesktop" THEN |
234 |
|
|
OSCLI"SetType " + Boot_Path$ + ".Choices.Boot." + File$ + " FEB" |
235 |
|
|
ELSE |
236 |
|
|
OSCLI"SetType " + Boot_Path$ + ".Choices.Boot." + File$ + " FEA" |
237 |
|
|
ENDIF |
238 |
|
|
|
239 |
|
|
PROCBoot_Scan |
240 |
|
|
|
241 |
|
|
ENDPROC |
242 |
|
|
|
243 |
|
|
REM ������������������������������������������������������������������������� |
244 |
|
|
|
245 |
|
|
DEF PROCBoot_Delete(Directory$) |
246 |
|
|
LOCAL List%, Item% |
247 |
|
|
|
248 |
|
|
List% = FNHeap_Find(0, "BootList") |
249 |
|
|
|
250 |
|
|
FOR Item% = 1 TO !List% |
251 |
|
|
IF (!(List% + 4 + 80 * (Item% - 1) + 00) AND 1) THEN |
252 |
|
|
OSCLI("Wipe " + Boot_Path$ + ".Choices.Boot." + Directory$ + "." + $(List% + 4 + 80 * (Item% - 1) + 20) + " ~CFR~V") |
253 |
|
|
ENDIF |
254 |
|
|
NEXT |
255 |
|
|
|
256 |
|
|
PROCBoot_Scan |
257 |
|
|
|
258 |
|
|
ENDPROC |
259 |
|
|
|
260 |
|
|
REM ������������������������������������������������������������������������� |
261 |
|
|
|
262 |
|
|
DEF PROCBoot_Edit(File$, Item%) |
263 |
|
|
LOCAL List%, In%, Out% |
264 |
|
|
|
265 |
|
|
List% = FNHeap_Find(0, "BootList") |
266 |
|
|
|
267 |
|
|
In% = OPENIN(Boot_Path$ + ".Choices.Boot." + File$) |
268 |
|
|
Out% = OPENOUT("Pipe:$." + File$) |
269 |
|
|
|
270 |
|
|
IF Item% = 0 THEN |
271 |
|
|
|
272 |
|
|
Item% = 1 |
273 |
|
|
WHILE (!(List% + 4 + 80 * (Item% - 1) + 00) AND 1) = 0 |
274 |
|
|
Item% += 1 |
275 |
|
|
ENDWHILE |
276 |
|
|
|
277 |
|
|
ENDIF |
278 |
|
|
|
279 |
|
|
WHILE NOT EOF#In% |
280 |
|
|
Line$ = GET$#In% |
281 |
|
|
|
282 |
|
|
IF LEFT$(Line$, 6) = "|Start" THEN |
283 |
|
|
IF MID$(Line$, 8) = $(List% + 4 + 80 * (Item% - 1) + 20) THEN |
284 |
|
|
BPUT#Out%, Line$ |
285 |
|
|
REPEAT |
286 |
|
|
Line$ = GET$#In% |
287 |
|
|
BPUT#Out%, Line$ |
288 |
|
|
UNTIL Line$ = "|End" |
289 |
|
|
ENDIF |
290 |
|
|
ENDIF |
291 |
|
|
|
292 |
|
|
ENDWHILE |
293 |
|
|
|
294 |
|
|
CLOSE#In% |
295 |
|
|
CLOSE#Out% |
296 |
|
|
|
297 |
|
|
OSCLI("SetType Pipe:$." + File$ + " FFF") |
298 |
|
|
OSCLI("Filer_Run Pipe:$." + File$) |
299 |
|
|
|
300 |
|
|
ENDPROC |
301 |
|
|
|
302 |
|
|
REM ������������������������������������������������������������������������� |
303 |
|
|
|
304 |
|
|
DEF PROCBoot_Load(File$) |
305 |
|
|
LOCAL File%, In%, Line$ |
306 |
|
|
|
307 |
|
|
IF File$ = "PreDesktop" AND B%!40 <> &FEB THEN ERROR Erro_Warn%, "%NotFEB" |
308 |
|
|
IF File$ = "Desktop" AND B%!40 <> &FEA THEN ERROR Erro_Warn%, "%NotFEA" |
309 |
|
|
|
310 |
|
|
File% = OPENIN(FNWimp_GetString(B% + 44)) |
311 |
|
|
IF EOF#File% THEN CLOSE#File%: ERROR Erro_Warn%, "%NoHeader" |
312 |
|
|
Line$ = GET$#File% |
313 |
|
|
IF LEFT$(Line$, 6) <> "|Start" THEN CLOSE#File%: ERROR Erro_Warn%, "%NoHeader" |
314 |
|
|
WHILE NOT EOF#File% |
315 |
|
|
Line$ = GET$#File% |
316 |
|
|
ENDWHILE |
317 |
|
|
IF Line$ <> "|End" THEN CLOSE#File%: ERROR Erro_Warn%, "%NoEnd" |
318 |
|
|
|
319 |
|
|
PTR#File% = 0 |
320 |
|
|
|
321 |
|
|
In% = OPENUP(Boot_Path$ + ".Choices.Boot." + File$) |
322 |
|
|
PTR#In% = EXT#In% |
323 |
|
|
|
324 |
|
|
WHILE NOT EOF#File% |
325 |
|
|
BPUT#In%, GET$#File% |
326 |
|
|
ENDWHILE |
327 |
|
|
|
328 |
|
|
CLOSE#In% |
329 |
|
|
CLOSE#File% |
330 |
|
|
|
331 |
|
|
FOR A% = 0 TO !B% STEP 4: !(B% + 200 + A%) = B%!A%: NEXT |
332 |
|
|
PROCBoot_Scan |
333 |
|
|
FOR A% = 0 TO B%!200 STEP 4: B%!A% = !(B% + 200 + A%): NEXT |
334 |
|
|
|
335 |
|
|
ENDPROC |
336 |
|
|
|
337 |
|
|
REM ������������������������������������������������������������������������� |
338 |
|
|
|
339 |
|
|
DEF PROCBoot_Copy(Directory$) |
340 |
|
|
LOCAL File$ |
341 |
|
|
|
342 |
|
|
File$ = FNWimp_GetString(B% + 44) |
343 |
|
|
Leaf$ = FNWimp_GetLeaf(File$) |
344 |
|
|
IF FNWimp_FileExists(Boot_Path$ + ".Choices.Boot." + Directory$ + "." + Leaf$) THEN ERROR Erro_Warn%, "%AlreadyExists" |
345 |
|
|
|
346 |
|
|
SYS"Wimp_StartTask", "Copy " + File$ + " " + Boot_Path$ + ".Choices.Boot." + Directory$ + "." + Leaf$ + " ~C~D~FLR~V" |
347 |
|
|
|
348 |
|
|
FOR A% = 0 TO !B% STEP 4: !(B% + 200 + A%) = B%!A%: NEXT |
349 |
|
|
PROCBoot_Scan |
350 |
|
|
FOR A% = 0 TO B%!200 STEP 4: B%!A% = !(B% + 200 + A%): NEXT |
351 |
|
|
|
352 |
|
|
ENDPROC |