Rev 3634 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3478 | 0CodErr | 1 | ; Run with OpenDialog ; |
2 | ; this source can be compiled ; |
||
3 | ; with FASM or NASM ; |
||
4 | |||
5 | org 0 |
||
6 | use32 |
||
7 | |||
8 | STACK_SIZE equ 256 |
||
9 | REDRAW_EVENT equ 1 |
||
10 | KEY_EVENT equ 2 |
||
11 | BUTTON_EVENT equ 3 |
||
12 | MOUSE_EVENT equ 6 |
||
13 | |||
14 | BUTTON_RUN equ 10 |
||
15 | BUTTON_BROWSE equ 20 |
||
16 | |||
17 | MENUET01 db 'MENUET01' |
||
18 | version dd 1 |
||
19 | program.start dd start_ |
||
20 | program.end dd end_ |
||
21 | program.memory dd end_ + STACK_SIZE |
||
22 | program.stack dd end_ + STACK_SIZE |
||
23 | program.params dd 0 |
||
24 | program.path dd 0 |
||
25 | |||
26 | ; ======================================================================= ; |
||
27 | start_: |
||
28 | ; set.event |
||
29 | mov eax, 40 |
||
30 | mov ebx, 39 |
||
31 | int 64 |
||
32 | |||
33 | push sz_box_lib |
||
34 | call load.library |
||
35 | mov [box_lib], eax |
||
36 | |||
37 | push dword[box_lib] |
||
38 | push sz_edit_box |
||
39 | call getprocaddress |
||
40 | mov [edit_box_draw], eax |
||
41 | |||
42 | push dword[box_lib] |
||
43 | push sz_edit_box_key |
||
44 | call getprocaddress |
||
45 | mov [edit_box_key], eax |
||
46 | |||
47 | push dword[box_lib] |
||
48 | push sz_edit_box_mouse |
||
49 | call getprocaddress |
||
50 | mov [edit_box_mouse], eax |
||
51 | |||
52 | push dword[box_lib] |
||
53 | push sz_edit_box_set_text |
||
54 | call getprocaddress |
||
55 | mov [edit_box_set_text], eax |
||
56 | |||
57 | push sz_proc_lib |
||
58 | call load.library |
||
59 | mov [proc_lib], eax |
||
60 | |||
61 | push dword[proc_lib] |
||
62 | push sz_OpenDialog_init |
||
63 | call getprocaddress |
||
64 | mov [opendialog_init], eax |
||
65 | |||
66 | push dword[proc_lib] |
||
67 | push sz_OpenDialog_start |
||
68 | call getprocaddress |
||
69 | mov [opendialog_start], eax |
||
70 | |||
71 | |||
72 | ; memory.allocate: |
||
73 | mov eax, 68 |
||
74 | mov ebx, 12 |
||
75 | mov ecx, 4096 + 4096 + 4096 |
||
76 | int 64 |
||
77 | |||
78 | mov [od.procinfo], eax |
||
79 | |||
80 | add eax, 1024 |
||
81 | mov [od.filename_area], eax |
||
82 | |||
83 | add eax, 4096 - 1024 |
||
84 | mov [od.opendir_path], eax |
||
85 | |||
86 | add eax, 4096 |
||
87 | mov [od.openfile_path], eax |
||
88 | |||
89 | push od |
||
90 | call [opendialog_init] |
||
91 | |||
92 | |||
93 | ; get.screen.size |
||
94 | mov eax, 61 |
||
95 | mov ebx, 1 |
||
96 | int 64 |
||
97 | |||
98 | mov [screen], eax |
||
99 | movzx eax, word[screen.width] |
||
100 | shr eax, 3 |
||
101 | lea eax, [eax*2 + eax] |
||
102 | add eax, 72 |
||
103 | mov [window.width], eax |
||
104 | |||
105 | ; skin.height |
||
106 | mov eax, 48 |
||
107 | mov ebx, 4 |
||
108 | int 64 |
||
109 | |||
110 | add eax, 64 |
||
111 | mov [window.height], eax |
||
112 | |||
113 | movzx eax, word[screen.width] |
||
114 | sub eax, [window.width] |
||
115 | shr eax, 1 |
||
116 | mov [window.left], eax |
||
117 | |||
118 | movzx eax, word[screen.height] |
||
119 | sub eax, [window.height] |
||
120 | sub eax, 24 |
||
121 | mov [window.top], eax |
||
122 | |||
123 | mov eax, [window.width] |
||
124 | sub eax, 20 |
||
125 | mov [edit1.width], eax |
||
126 | |||
127 | mov eax, [od.openfile_path] |
||
128 | mov [edit1.text], eax |
||
129 | |||
130 | |||
131 | call on_redraw |
||
132 | ; ----------------------- ; |
||
133 | .loop: |
||
134 | ; wait.event |
||
135 | mov eax, 10 |
||
136 | int 64 |
||
137 | cmp eax, REDRAW_EVENT |
||
138 | jne .check_key |
||
139 | call on_redraw |
||
140 | jmp .loop |
||
141 | ; ----------------------- ; |
||
142 | .check_key: |
||
143 | cmp eax, KEY_EVENT |
||
144 | jne .check_button |
||
145 | mov eax, 2 |
||
146 | int 64 |
||
147 | cmp ah, 13 |
||
148 | jne .no_key_enter |
||
149 | call on_button_run |
||
150 | jmp .loop |
||
151 | ; ----------------------- ; |
||
152 | .no_key_enter: |
||
153 | push edit1 |
||
154 | call [edit_box_key] |
||
155 | jmp .loop |
||
156 | ; ----------------------- ; |
||
157 | .check_button: |
||
158 | cmp eax, BUTTON_EVENT |
||
159 | jne .check_mouse |
||
160 | ; get.button.number |
||
161 | mov eax, 17 |
||
162 | int 64 |
||
163 | cmp ah, 1 |
||
164 | jne .check_button_run |
||
165 | ; program.terminate |
||
166 | or eax, -1 |
||
167 | int 64 |
||
168 | ; ----------------------- ; |
||
169 | .check_button_run: |
||
170 | cmp ah, BUTTON_RUN |
||
171 | jne .check_button_browse |
||
172 | call on_button_run |
||
173 | jmp .loop |
||
174 | ; ----------------------- ; |
||
175 | .check_button_browse: |
||
176 | cmp ah, BUTTON_BROWSE |
||
177 | jne .loop |
||
178 | call on_button_browse |
||
179 | jmp .loop |
||
180 | ; ----------------------- ; |
||
181 | .check_mouse: |
||
182 | cmp eax, MOUSE_EVENT |
||
183 | jne .loop |
||
184 | push edit1 |
||
185 | call [edit_box_mouse] |
||
186 | jmp .loop |
||
187 | |||
188 | |||
189 | ; ======================================================================= ; |
||
190 | on_button_run: |
||
191 | push dword[edit1.text] |
||
192 | call extractrunpathandparams |
||
193 | |||
194 | ;file.run: |
||
195 | mov eax, 70 |
||
196 | mov ebx, file_info |
||
197 | int 64 |
||
198 | |||
199 | mov dl, byte[lastendpath] |
||
200 | mov ecx, [ptrlastendpath] |
||
201 | mov [ecx], dl |
||
202 | |||
203 | test eax, eax |
||
204 | jnge .error |
||
205 | mov [runresult], dword sz_Program_run_successfully |
||
206 | jmp .exit |
||
207 | |||
208 | .error: |
||
209 | ; ----------------------- ; |
||
210 | .5: |
||
211 | cmp al, -5 |
||
212 | jne .31 |
||
213 | mov [runresult], dword sz_File_not_found |
||
214 | jmp .exit |
||
215 | ; ----------------------- ; |
||
216 | .31: |
||
217 | cmp al, -31 |
||
218 | jne .32 |
||
219 | mov [runresult], dword sz_File_is_not_executable |
||
220 | jmp .exit |
||
221 | ; ----------------------- ; |
||
222 | .32: |
||
223 | cmp al, -32 |
||
224 | jne .10 |
||
225 | mov [runresult], dword sz_Too_many_processes |
||
226 | jmp .exit |
||
227 | ; ----------------------- ; |
||
228 | .10: |
||
229 | cmp al, -10 |
||
230 | jne .30 |
||
231 | mov [runresult], dword sz_Access_denied |
||
232 | jmp .exit |
||
233 | ; ----------------------- ; |
||
234 | .30: |
||
235 | cmp al, -30 |
||
236 | jne .unknown |
||
237 | mov [runresult], dword sz_Out_of_memory |
||
238 | jmp .exit |
||
239 | ; ----------------------- ; |
||
240 | .unknown: |
||
241 | mov [runresult], dword sz_Unknown_error |
||
242 | ; ----------------------- ; |
||
243 | .exit: |
||
244 | call on_redraw |
||
245 | ret |
||
246 | |||
247 | ; ======================================================================= ; |
||
248 | on_button_browse: |
||
249 | push od |
||
250 | call [opendialog_start] |
||
251 | |||
252 | mov eax, [od.status] |
||
253 | test eax, eax |
||
254 | je .exit |
||
255 | |||
256 | ;======== if space exist in filepath, then quote filepath |
||
257 | mov eax, [od.openfile_path] |
||
258 | ; ----------------------- ; |
||
259 | .check_space: |
||
260 | cmp [eax], byte 0 |
||
261 | je .no_space |
||
262 | cmp [eax], byte 32 ;space |
||
263 | je .space |
||
264 | inc eax |
||
265 | jmp .check_space |
||
266 | .space: |
||
267 | ; ----------------------- ; |
||
268 | .find_end_zero: |
||
269 | inc eax |
||
270 | cmp [eax], byte 0 |
||
271 | jne .find_end_zero |
||
272 | mov [eax + 2], byte 0 |
||
273 | mov [eax + 1], byte 34 ; quote |
||
274 | ; ----------------------- ; |
||
275 | .shift_path: |
||
276 | dec eax |
||
277 | |||
278 | mov dl, byte [eax ] |
||
279 | mov [eax + 1], dl |
||
280 | |||
281 | cmp eax, [od.openfile_path] |
||
282 | jne .shift_path |
||
283 | mov [eax ], byte 34 ; quote |
||
284 | |||
285 | .no_space: |
||
286 | ;================================= |
||
287 | |||
288 | push dword[od.openfile_path] |
||
289 | push edit1 |
||
290 | call [edit_box_set_text] |
||
291 | ; ----------------------- ; |
||
292 | .exit: |
||
293 | ret |
||
294 | |||
295 | |||
296 | ; ======================================================================= ; |
||
297 | on_redraw: |
||
298 | ; redraw.start |
||
299 | mov eax, 12 |
||
300 | mov ebx, 1 |
||
301 | int 64 |
||
302 | ; get.standart.colors |
||
303 | mov eax, 48 |
||
304 | mov ebx, 3 |
||
305 | mov ecx, sc |
||
306 | mov edx, 40 |
||
307 | int 64 |
||
308 | |||
309 | mov eax, [sc.work_graph] |
||
310 | mov [edit1.shift_color], eax |
||
311 | |||
312 | mov eax, [sc.work_graph] |
||
313 | mov [edit1.focus_border_color], eax |
||
314 | |||
315 | mov eax, [sc.frames] |
||
316 | mov [edit1.blur_border_color], eax |
||
317 | |||
318 | mov eax, [sc.work_text] |
||
319 | mov [edit1.text_color], eax |
||
320 | |||
321 | ; draw.window |
||
322 | xor eax, eax |
||
323 | mov ebx, [window.left] |
||
324 | shl ebx, 16 |
||
325 | add ebx, [window.width] |
||
326 | mov ecx, [window.top] |
||
327 | shl ecx, 16 |
||
328 | add ecx, [window.height] |
||
329 | mov edx, [sc.work] |
||
330 | or edx, 34000000h |
||
331 | mov edi, sz_run |
||
332 | int 64 |
||
333 | |||
334 | mov eax, [window.width] |
||
335 | sub eax, 318 |
||
336 | shr eax, 1 |
||
337 | sub eax, 5 |
||
338 | push eax |
||
339 | push 5 |
||
340 | push sz_Type_name_of_program |
||
341 | push dword [sc.work_text] |
||
342 | call draw.text |
||
343 | |||
344 | ; ====================| browse button |==================== |
||
345 | push 20 |
||
346 | push 5 |
||
347 | push 38 |
||
348 | push 42 |
||
349 | push 17 |
||
350 | call draw.button |
||
351 | |||
352 | push 3 |
||
353 | push 42 |
||
354 | push sz_browse |
||
355 | push dword [sc.work_button_text] |
||
356 | call draw.text |
||
357 | |||
358 | ; ====================| run button |==================== |
||
359 | push 10 |
||
360 | mov eax, [window.width] |
||
361 | sub eax, 57 |
||
362 | push eax |
||
363 | push 38 |
||
364 | push 42 |
||
365 | push 17 |
||
366 | call draw.button |
||
367 | |||
368 | mov eax, [window.width] |
||
369 | sub eax, 56 |
||
370 | push eax |
||
371 | push 42 |
||
372 | push sz_run |
||
373 | push dword [sc.work_button_text] |
||
374 | call draw.text |
||
375 | ; ===================================================== |
||
376 | |||
377 | mov eax, 57 |
||
378 | push eax |
||
379 | mov eax, [window.height] |
||
380 | sub eax, 44 |
||
381 | push eax |
||
382 | push dword[runresult] |
||
383 | push dword [sc.work_text] |
||
384 | call draw.text |
||
385 | |||
386 | push edit1 |
||
387 | call [edit_box_draw] |
||
388 | |||
389 | ; redraw.finish |
||
390 | mov eax, 12 |
||
391 | mov ebx, 2 |
||
392 | int 64 |
||
393 | |||
394 | ret |
||
395 | |||
396 | |||
397 | ; ======================================================================= ; |
||
398 | extractrunpathandparams: |
||
399 | xor ecx, ecx |
||
400 | |||
401 | mov eax, [esp + 4] |
||
402 | mov [runpath], eax |
||
403 | |||
404 | movzx eax, byte [eax] |
||
405 | cmp eax, 34 |
||
406 | jne .start_without_quote |
||
407 | |||
408 | inc ecx |
||
409 | ; ----------------------- ; |
||
410 | .loop1: |
||
411 | mov eax, [runpath] |
||
412 | movzx eax, byte [eax + ecx] |
||
413 | cmp eax, 34 |
||
414 | jne .not_quote |
||
415 | |||
416 | mov eax, [runpath] |
||
417 | mov [eax + ecx], byte 0 |
||
418 | |||
419 | mov eax, [runpath] |
||
420 | add eax, ecx |
||
421 | mov [ptrlastendpath], eax |
||
422 | mov [lastendpath], byte 34 |
||
423 | inc ecx |
||
424 | ; ----------------------- ; |
||
425 | .skip_space1: |
||
426 | mov eax, [runpath] |
||
427 | movzx eax, byte [eax + ecx] |
||
428 | cmp al, 32 |
||
429 | jne .skipped1 |
||
430 | inc ecx |
||
431 | jmp .skip_space1 |
||
432 | ; ----------------------- ; |
||
433 | .skipped1: |
||
434 | mov eax, [runpath] |
||
435 | add eax, ecx |
||
436 | mov [runparams], eax |
||
437 | inc dword [runpath] |
||
438 | jmp .exit |
||
439 | ; ----------------------- ; |
||
440 | .not_quote: |
||
441 | mov eax, [runpath] |
||
442 | movzx eax, byte [eax + ecx] |
||
443 | |||
444 | test eax, eax |
||
445 | jne .not_zero1 |
||
446 | mov eax, [runpath] |
||
447 | add eax, ecx |
||
448 | mov [runparams], eax |
||
449 | mov eax, [runpath] |
||
450 | add eax, ecx |
||
451 | mov [ptrlastendpath], eax |
||
452 | mov [lastendpath], byte 0 |
||
453 | jmp .exit |
||
454 | ; ----------------------- ; |
||
455 | .not_zero1: |
||
456 | inc ecx |
||
457 | jmp .loop1 |
||
458 | ; ----------------------- ; |
||
459 | .start_without_quote: |
||
460 | ; ----------------------- ; |
||
461 | .loop2: |
||
462 | mov eax, [runpath] |
||
463 | movzx eax, byte [eax + ecx] |
||
464 | cmp eax, 32 |
||
465 | jne .not_space |
||
466 | |||
467 | mov eax, [runpath] |
||
468 | mov [eax + ecx], byte 0 |
||
469 | |||
470 | mov eax, [runpath] |
||
471 | add eax, ecx |
||
472 | mov [ptrlastendpath], eax |
||
473 | mov [lastendpath], byte 32 |
||
474 | inc ecx |
||
475 | ; ----------------------- ; |
||
476 | .skip_space2: |
||
477 | mov eax, [runpath] |
||
478 | movzx eax, byte [eax + ecx] |
||
479 | cmp al, 32 |
||
480 | jne .skipped2 |
||
481 | inc ecx |
||
482 | jmp .skip_space2 |
||
483 | ; ----------------------- ; |
||
484 | .skipped2: |
||
485 | mov eax, [runpath] |
||
486 | add eax, ecx |
||
487 | mov [runparams], eax |
||
488 | jmp .exit |
||
489 | ; ----------------------- ; |
||
490 | .not_space: |
||
491 | mov eax, [runpath] |
||
492 | movzx eax, byte [eax + ecx] |
||
493 | |||
494 | test eax, eax |
||
495 | jne .not_zero2 |
||
496 | mov eax, [runpath] |
||
497 | add eax, ecx |
||
498 | mov [runparams], eax |
||
499 | mov eax, [runpath] |
||
500 | add eax, ecx |
||
501 | mov [ptrlastendpath], eax |
||
502 | mov [lastendpath], byte 0 |
||
503 | jmp .exit |
||
504 | ; ----------------------- ; |
||
505 | .not_zero2: |
||
506 | inc ecx |
||
507 | jmp .loop2 |
||
508 | ; ----------------------- ; |
||
509 | .exit: |
||
510 | ret 4 |
||
511 | |||
512 | ; ======================================================================= ; |
||
513 | draw.button: |
||
514 | mov eax, 8 |
||
515 | mov ebx, [esp + 16] |
||
516 | shl ebx, 16 |
||
517 | add ebx, [esp + 8] |
||
518 | mov ecx, [esp + 12] |
||
519 | shl ecx, 16 |
||
520 | add ecx, [esp + 4] |
||
521 | mov edx, [esp + 20] |
||
522 | mov esi, [sc.work_button] |
||
523 | int 64 |
||
524 | ret 20 |
||
525 | ; ======================================================================= ; |
||
526 | draw.text: |
||
527 | mov eax, 4 |
||
528 | mov ebx, [esp + 16] |
||
529 | shl ebx, 16 |
||
530 | add ebx, [esp + 12] |
||
531 | mov ecx, 2147483648 |
||
532 | or ecx, [esp + 4] |
||
533 | mov edx, [esp + 8] |
||
534 | int 64 |
||
535 | ret 16 |
||
536 | ; ======================================================================= ; |
||
537 | load.library: |
||
538 | mov eax, 68 |
||
539 | mov ebx, 19 |
||
540 | mov ecx, [esp + 4] |
||
541 | int 64 |
||
542 | ret 4 |
||
543 | ; ======================================================================= ; |
||
544 | getprocaddress: |
||
545 | mov edx, [esp + 8] ; hlib |
||
546 | xor eax, eax |
||
547 | test edx, edx ; If hlib = 0 then goto .end |
||
548 | jz .end |
||
549 | ; ----------------------- ; |
||
550 | .next: |
||
551 | cmp [edx], dword 0 ; If end of export table then goto .end |
||
552 | jz .end |
||
553 | |||
554 | xor eax, eax |
||
555 | mov esi, [edx] |
||
556 | mov edi, [esp + 4] ; name |
||
557 | ; ----------------------- ; |
||
558 | .next_: |
||
559 | lodsb |
||
560 | scasb |
||
561 | jne .fail |
||
562 | or al, al |
||
563 | jnz .next_ |
||
564 | jmp .ok |
||
565 | ; ----------------------- ; |
||
566 | .fail: |
||
567 | add edx, 8 |
||
568 | jmp .next |
||
569 | ; ----------------------- ; |
||
570 | .ok: ; return address |
||
571 | mov eax, [edx + 4] |
||
572 | ; ----------------------- ; |
||
573 | .end: |
||
574 | ret 8 |
||
575 | |||
576 | |||
577 | |||
578 | file_info: |
||
579 | dd 7 |
||
580 | dd 0 |
||
581 | runparams: |
||
582 | dd 0 |
||
583 | dd 0 |
||
584 | dd 0 |
||
585 | db 0 |
||
586 | runpath: |
||
587 | dd 0 |
||
588 | |||
589 | |||
590 | screen: |
||
591 | .height dw 0 |
||
592 | .width dw 0 |
||
593 | |||
594 | window: |
||
595 | .left dd 0 |
||
596 | .top dd 0 |
||
597 | .width dd 0 |
||
598 | .height dd 0 |
||
599 | |||
600 | box_lib dd 0 |
||
601 | |||
602 | edit1: |
||
603 | .width dd 0 |
||
604 | .left dd 5 |
||
605 | .top dd 19 |
||
606 | .color dd 0ffffffffh |
||
607 | .shift_color dd 0 |
||
608 | .focus_border_color dd 0 |
||
609 | .blur_border_color dd 0 |
||
610 | .text_color dd 0 |
||
611 | .max dd 4096 |
||
612 | .text dd 0 |
||
613 | .mouse_variable dd 0 |
||
614 | .flags dd 2 |
||
615 | .size dd 0 |
||
616 | .pos dd 0 |
||
617 | .offset dd 0 |
||
618 | .cl_curs_x dd 0 |
||
619 | .cl_curs_y dd 0 |
||
620 | .shift dd 0 |
||
621 | .shift_old dd 0 |
||
622 | |||
623 | edit_box_draw dd 0 |
||
624 | edit_box_key dd 0 |
||
625 | edit_box_mouse dd 0 |
||
626 | edit_box_set_text dd 0 |
||
627 | |||
628 | sc: |
||
629 | .frames dd 0 |
||
630 | .grab dd 0 |
||
631 | .grab_button dd 0 |
||
632 | .grab_button_text dd 0 |
||
633 | .grab_text dd 0 |
||
634 | .work dd 0 |
||
635 | .work_button dd 0 |
||
636 | .work_button_text dd 0 |
||
637 | .work_text dd 0 |
||
638 | .work_graph dd 0 |
||
639 | |||
640 | proc_lib dd 0 |
||
641 | |||
642 | od: |
||
643 | .mode dd 0 |
||
644 | .procinfo dd 0 |
||
645 | .com_area_name dd sz_FFFFFFFF_open_dialog |
||
646 | .com_area dd 0 |
||
647 | .opendir_path dd 0 |
||
648 | .dir_default_path dd sz_SYS |
||
649 | .start_path dd sz_opendial_path |
||
650 | .draw_window dd on_redraw |
||
651 | .status dd 0 |
||
652 | .openfile_path dd 0 |
||
653 | .filename_area dd 0 |
||
654 | .filter_area dd filefilter |
||
655 | .x_size dw 414 |
||
656 | .x_start dw 0 |
||
657 | .y_size dw 414 |
||
658 | .y_start dw 0 |
||
659 | |||
660 | opendialog_init dd 0 |
||
661 | opendialog_start dd 0 |
||
662 | |||
663 | filefilter dd 0 |
||
664 | runresult dd sz_empty |
||
665 | |||
666 | lastendpath db 0 |
||
667 | ptrlastendpath dd 0 |
||
668 | |||
669 | sz_empty db 0 |
||
670 | |||
671 | sz_box_lib db "/sys/lib/box_lib.obj",0 |
||
672 | sz_edit_box db "edit_box",0 |
||
673 | sz_edit_box_key db "edit_box_key",0 |
||
674 | sz_edit_box_mouse db "edit_box_mouse",0 |
||
675 | sz_edit_box_set_text db "edit_box_set_text",0 |
||
676 | |||
677 | sz_proc_lib db "/sys/lib/proc_lib.obj",0 |
||
678 | sz_OpenDialog_init db "OpenDialog_init",0 |
||
679 | sz_OpenDialog_start db "OpenDialog_start",0 |
||
680 | sz_FFFFFFFF_open_dialog db "FFFFFFFF_open_dialog",0 |
||
681 | sz_SYS db "/sys",0 |
||
682 | sz_opendial_path db "/sys/File managers/opendial",0 |
||
683 | |||
684 | sz_Program_run_successfully db "Program run successfully",0 |
||
685 | sz_File_not_found db "File not found",0 |
||
686 | sz_File_is_not_executable db "File is not executable",0 |
||
687 | sz_Too_many_processes db "Too many processes",0 |
||
688 | sz_Access_denied db "Access denied",0 |
||
689 | sz_Out_of_memory db "Out of memory",0 |
||
690 | sz_Unknown_error db "Unknown error",0 |
||
691 | |||
692 | sz_Type_name_of_program db "Type name of program, and Kolibri will run it for you",0 |
||
693 | |||
694 | sz_run db " Run ",0 |
||
695 | sz_browse db " Browse ",0 |
||
696 | |||
697 | ; ======================================================================= ; |
||
698 | end_: |
||
699 |