Rev 7476 | Rev 8346 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7476 | Rev 7483 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ; Formatting Disk Utility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ; Formatting Disk Utility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
3 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
3 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
4 | ; Compile with FASM |
4 | ; Compile with FASM |
5 | ; FORMAT ver. Oct 18, 2018 |
5 | ; FORMAT ver. Oct 19, 2018 |
Line 6... | Line 6... | ||
6 | 6 | ||
7 | ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage |
7 | ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage |
8 | ; All rights reserved. |
8 | ; All rights reserved. |
9 | ; Redistribution and use in source and binary forms, with or without modification, |
9 | ; Redistribution and use in source and binary forms, with or without modification, |
Line 67... | Line 67... | ||
67 | and ecx, 0x9FFFFFFF |
67 | and ecx, 0x9FFFFFFF |
68 | or ecx,0x90000000 |
68 | or ecx,0x90000000 |
Line 69... | Line 69... | ||
69 | 69 | ||
Line 70... | Line 70... | ||
70 | call initBuf |
70 | call initBuf |
71 | - | ||
72 | mov dword[editLU.text_color], ecx |
71 | |
Line 73... | Line 72... | ||
73 | mov dword[editRU.text_color], ecx |
72 | mov dword[editLabel.text_color], ecx |
74 | mov dword[editMBR.text_color], ecx |
73 | mov dword[editMBR.text_color], ecx |
Line 114... | Line 113... | ||
114 | stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.7, 127 |
113 | stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.7, 127 |
115 | stdcall [ksubmenu_add], [kmUnit], eax |
114 | stdcall [ksubmenu_add], [kmUnit], eax |
116 | mov byte[kmUnitID], 0 |
115 | mov byte[kmUnitID], 0 |
117 | stdcall [kmenuitem_new], KMENUITEM_SUBMENU, unittext.0, [kmUnit] |
116 | stdcall [kmenuitem_new], KMENUITEM_SUBMENU, unittext.0, [kmUnit] |
Line -... | Line 117... | ||
- | 117 | ||
- | 118 | call getDeviceList |
|
118 | 119 | ||
Line 119... | Line 120... | ||
119 | call draw_window |
120 | call draw_window |
120 | 121 | ||
Line 140... | Line 141... | ||
140 | call draw_window |
141 | call draw_window |
141 | jmp event_wait |
142 | jmp event_wait |
Line 142... | Line 143... | ||
142 | 143 | ||
143 | key: |
144 | key: |
144 | mcall 2 |
145 | mcall 2 |
145 | invoke edit_box_key, editLU |
- | |
146 | invoke edit_box_key, editRU |
146 | invoke edit_box_key, editLabel |
147 | invoke edit_box_key, editMBR |
147 | invoke edit_box_key, editMBR |
Line 148... | Line 148... | ||
148 | jmp event_wait |
148 | jmp event_wait |
149 | 149 | ||
Line 173... | Line 173... | ||
173 | cmp ah, 5 ;Select unit size button |
173 | cmp ah, 5 ;Select unit size button |
174 | jne @f |
174 | jne @f |
175 | call butUnit |
175 | call butUnit |
176 | jmp event_wait |
176 | jmp event_wait |
177 | @@: |
177 | @@: |
- | 178 | cmp ah, 6 ;Select Device button |
|
- | 179 | jne @f |
|
- | 180 | call butDevice |
|
- | 181 | jmp event_wait |
|
- | 182 | @@: |
|
178 | cmp ah, 110 ;kmenu list FS |
183 | cmp ah, 110 ;kmenu list FS |
179 | jb @f |
184 | jb @f |
180 | cmp ah, 114 |
185 | cmp ah, 114 |
181 | ja @f |
186 | ja @f |
182 | sub ah, 110 |
187 | sub ah, 110 |
Line 189... | Line 194... | ||
189 | ja @f |
194 | ja @f |
190 | sub ah, 120 |
195 | sub ah, 120 |
191 | mov byte[kmUnitID], ah |
196 | mov byte[kmUnitID], ah |
192 | jmp redraw |
197 | jmp redraw |
193 | @@: |
198 | @@: |
- | 199 | cmp ah, 130 ;kmenu Device |
|
- | 200 | jb @f |
|
- | 201 | cmp ah, 250 |
|
- | 202 | ja @f |
|
- | 203 | sub ah, 130 |
|
- | 204 | mov byte[kmDeviceID], ah |
|
- | 205 | jmp redraw |
|
- | 206 | @@: |
|
194 | jmp event_wait |
207 | jmp event_wait |
Line 195... | Line 208... | ||
195 | 208 | ||
196 | mouse: |
209 | mouse: |
197 | invoke check_box_mouse, ch1 ;ïðîâåðêà ÷åê áîêñà |
210 | invoke check_box_mouse, ch1 ;ïðîâåðêà ÷åê áîêñà |
Line 198... | Line 211... | ||
198 | invoke check_box_mouse, ch2 |
211 | invoke check_box_mouse, ch2 |
199 | - | ||
200 | invoke edit_box_mouse, editLU ;ïðîâåðêà ñîáûòèé ìûøè äëÿ editBox'îâ |
212 | |
Line 201... | Line 213... | ||
201 | invoke edit_box_mouse, editRU |
213 | invoke edit_box_mouse, editLabel ;ïðîâåðêà ñîáûòèé ìûøè äëÿ editBox'îâ |
202 | invoke edit_box_mouse, editMBR |
214 | invoke edit_box_mouse, editMBR |
Line 241... | Line 253... | ||
241 | 253 | ||
242 | stdcall [ksubmenu_draw], [kmUnit], coordUnit |
254 | stdcall [ksubmenu_draw], [kmUnit], coordUnit |
243 | pop ecx ebx eax |
255 | pop ecx ebx eax |
Line -... | Line 256... | ||
- | 256 | ret |
|
- | 257 | ||
- | 258 | butDevice: |
|
- | 259 | push eax ebx ecx |
|
- | 260 | mcall 9, pi, -1 |
|
- | 261 | ||
- | 262 | mov eax, dword[pi+34] |
|
- | 263 | add eax, Otstup+80+30+delta |
|
- | 264 | mov word[coordDevice.x], ax |
|
- | 265 | ||
- | 266 | mov eax, dword[pi+38] |
|
- | 267 | add eax, 79 |
|
- | 268 | mov word[coordDevice.y], ax |
|
- | 269 | ||
- | 270 | stdcall [ksubmenu_draw], [kmDevice], coordDevice |
|
- | 271 | pop ecx ebx eax |
|
- | 272 | ret |
|
244 | ret |
273 | |
245 | 274 | ||
246 | delta = 50 |
275 | delta = 50 |
247 | dy = 15 + 40 |
276 | dy = 15 + 40 |
248 | warning_title: db 'Warning!',0 |
277 | warning_title: db 'Warning!',0 |
Line 262... | Line 291... | ||
262 | ; 0x80000000 = color glide |
291 | ; 0x80000000 = color glide |
263 | mov edi, title |
292 | mov edi, title |
264 | mcall |
293 | mcall |
Line 265... | Line 294... | ||
265 | 294 | ||
266 | 295 | ||
267 | mov ebx, (290+delta-Otstup-130)*65536+130 |
296 | mov ebx, (290+delta-Otstup-130+10)*65536+130 |
268 | mov ecx, (270+dy)*65536+(20+3) |
297 | mov ecx, (270+dy)*65536+(20+3) |
269 | mov edx, 0x00000002 |
298 | mov edx, 0x00000002 |
Line 288... | Line 317... | ||
288 | mov ecx, (110)*65536+(21) |
317 | mov ecx, (110)*65536+(21) |
289 | mov edx, 0x00000005 |
318 | mov edx, 0x00000005 |
290 | mov esi, 0xFFFFFF |
319 | mov esi, 0xFFFFFF |
291 | mcall 8 |
320 | mcall 8 |
Line -... | Line 321... | ||
- | 321 | ||
- | 322 | ;button select device |
|
- | 323 | mov ebx, (Otstup+80+30+delta)*65536+120 |
|
- | 324 | mov ecx, (60)*65536+(21) |
|
- | 325 | mov edx, 0x00000006 |
|
- | 326 | mov esi, 0xFFFFFF |
|
- | 327 | mcall 8 |
|
292 | 328 | ||
293 | invoke check_box_draw, ch1 ;ðèñîâàíèå ÷åêáîêñîâ |
329 | invoke check_box_draw, ch1 ;ðèñîâàíèå ÷åêáîêñîâ |
Line 294... | Line 330... | ||
294 | invoke check_box_draw, ch2 |
330 | invoke check_box_draw, ch2 |
295 | 331 | ||
296 | invoke edit_box_draw, editMBR ;ðèñîâàíèå edit box'îâ |
- | |
Line 297... | Line 332... | ||
297 | invoke edit_box_draw, editLU |
332 | invoke edit_box_draw, editMBR ;ðèñîâàíèå edit box'îâ |
Line 298... | Line 333... | ||
298 | invoke edit_box_draw, editRU |
333 | invoke edit_box_draw, editLabel |
Line 338... | Line 373... | ||
338 | .disk db ' ª®¯¨â¥«ì:', 0 ;' ¬ª®áâì:', 0 |
373 | .disk db ' ª®¯¨â¥«ì:', 0 ;' ¬ª®áâì:', 0 |
339 | .unit db ' §¬¥à ª« áâ¥à :', 0 |
374 | .unit db ' §¬¥à ª« áâ¥à :', 0 |
340 | .option db ' à ¬¥âàë:', 0 |
375 | .option db ' à ¬¥âàë:', 0 |
341 | .format db '®à¬ â¨à®¢ âì', 0 |
376 | .format db '®à¬ â¨à®¢ âì', 0 |
Line -... | Line 377... | ||
- | 377 | ||
- | 378 | unittext: |
|
- | 379 | .0 db '512 ¡ ©â', 0 |
|
- | 380 | .1 db '1024 ¡ ©â', 0 |
|
- | 381 | .2 db '2048 ¡ ©â', 0 |
|
- | 382 | .3 db '4096 ¡ ©â', 0 |
|
- | 383 | .4 db '8192 ¡ ©â', 0 |
|
- | 384 | .5 db '16 ¡', 0 |
|
- | 385 | .6 db '32 ¡', 0 |
|
- | 386 | .7 db '64 ¡', 0 |
|
342 | 387 | ||
343 | head_f_i: |
388 | head_f_i: |
344 | head_f_l db '¨á⥬ ï ®è¨¡ª ',0 |
389 | head_f_l db '¨á⥬ ï ®è¨¡ª ',0 |
345 | err_message_found_lib0 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'proc_lib.obj',39,0 |
390 | err_message_found_lib0 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'proc_lib.obj',39,0 |
346 | err_message_import0 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0 |
391 | err_message_import0 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0 |
Line 361... | Line 406... | ||
361 | .disk db 'Storage device:', 0 ;'Capacity:', 0 |
406 | .disk db 'Storage device:', 0 ;'Capacity:', 0 |
362 | .unit db 'Allocation unit size:', 0 |
407 | .unit db 'Allocation unit size:', 0 |
363 | .option db 'Options:', 0 |
408 | .option db 'Options:', 0 |
364 | .format db 'Format', 0 |
409 | .format db 'Format', 0 |
Line -... | Line 410... | ||
- | 410 | ||
- | 411 | unittext: |
|
- | 412 | .0 db '512 bytes', 0 |
|
- | 413 | .1 db '1024 bytes', 0 |
|
- | 414 | .2 db '2048 bytes', 0 |
|
- | 415 | .3 db '4096 bytes', 0 |
|
- | 416 | .4 db '8192 bytes', 0 |
|
- | 417 | .5 db '16 Kb', 0 |
|
- | 418 | .6 db '32 Kb', 0 |
|
- | 419 | .7 db '64 Kb', 0 |
|
365 | 420 | ||
366 | head_f_i: |
421 | head_f_i: |
367 | head_f_l db 'System error',0 |
422 | head_f_l db 'System error',0 |
368 | err_message_found_lib0 db 'Could not find library ',39,'proc_lib.obj',39,0 |
423 | err_message_found_lib0 db 'Could not find library ',39,'proc_lib.obj',39,0 |
369 | err_message_import0 db 'Error importing library ',39,'proc_lib.obj',39,0 |
424 | err_message_import0 db 'Error importing library ',39,'proc_lib.obj',39,0 |
370 | err_message_found_lib1 db 'Could not find library ',39,'kmenu.obj',39,0 |
425 | err_message_found_lib1 db 'Could not find library ',39,'kmenu.obj',39,0 |
Line 371... | Line 426... | ||
371 | err_message_import1 db 'Error importing library ',39,'kmenu',39,0 |
426 | err_message_import1 db 'Error importing library ',39,'kmenu',39,0 |
Line -... | Line 427... | ||
- | 427 | ||
- | 428 | end if |
|
- | 429 | ||
- | 430 | ||
- | 431 | ||
- | 432 | root_path: db "/", 0 |
|
- | 433 | ||
- | 434 | align 4 |
|
- | 435 | maxDeviceCount = 250-130 |
|
- | 436 | read_folder_struct: |
|
- | 437 | .subfunction dd 1 |
|
- | 438 | .start dd 0 ;start block |
|
- | 439 | .encoding dd 3 ;1-cp866, 2-UTF-16LE, 3-utf8 |
|
- | 440 | .count dd maxDeviceCount ;count blocks |
|
- | 441 | .return dd 0 ;àäðåñ ïàìÿòè äëÿ ïîëó÷àåìîãî áëîêà ÁÄÂÊ ñ çàãîëîâêîì |
|
- | 442 | .name db 0 |
|
- | 443 | .path_adr dd root_path |
|
- | 444 | noneDevice: db '-', 0 |
|
- | 445 | ;adrDevice: dd 0 |
|
- | 446 | ||
- | 447 | getDeviceList: |
|
- | 448 | push eax ebx ecx esi |
|
- | 449 | stdcall [ksubmenu_new] |
|
- | 450 | mov [kmDevice], eax |
|
- | 451 | sizeBDVK = 560 ;304 ; |
|
- | 452 | ||
- | 453 | mcall 68, 11 |
|
- | 454 | ||
- | 455 | mcall 68, 12, sizeBDVK*maxDeviceCount+32 |
|
- | 456 | mov dword[read_folder_struct.return], eax |
|
- | 457 | mcall 70, read_folder_struct |
|
- | 458 | cmp eax, 0 |
|
- | 459 | je .next |
|
- | 460 | cmp eax, 6 |
|
- | 461 | je .next |
|
- | 462 | jmp .none |
|
- | 463 | .next: |
|
- | 464 | mov eax, dword[read_folder_struct.return] |
|
- | 465 | mov esi, deviceAdrStr |
|
- | 466 | add eax, 32 |
|
- | 467 | mov ecx, 130 |
|
- | 468 | @@: |
|
- | 469 | cmp ebx, 0 |
|
- | 470 | je @f |
|
- | 471 | push eax ebx ecx |
|
- | 472 | add eax, 40 |
|
- | 473 | ;mov [adrDevice], eax |
|
- | 474 | mov dword[esi], eax |
|
- | 475 | stdcall [kmenuitem_new], KMENUITEM_NORMAL, [esi], ecx ; [adrDevice], ecx |
|
- | 476 | stdcall [ksubmenu_add], [kmDevice], eax |
|
- | 477 | pop ecx ebx eax |
|
- | 478 | add esi, 4 |
|
- | 479 | inc ecx |
|
- | 480 | dec ebx |
|
- | 481 | add eax, sizeBDVK |
|
- | 482 | cmp ecx, 250 |
|
- | 483 | ja @f |
|
- | 484 | jmp @b |
|
- | 485 | .none: |
|
- | 486 | stdcall [kmenuitem_new], KMENUITEM_NORMAL, noneDevice, 130 |
|
- | 487 | mov dword[esi], noneDevice |
|
- | 488 | stdcall [ksubmenu_add], [kmDevice], eax |
|
- | 489 | @@: |
|
- | 490 | mov byte[kmDeviceID], 0 |
|
- | 491 | stdcall [kmenuitem_new], KMENUITEM_SUBMENU, unittext.0, [kmDevice] |
|
372 | 492 | pop esi ecx ebx eax |
|
373 | end if |
493 | ret |
374 | 494 | ||
375 | 495 | ||
376 | draw_super_text: |
496 | draw_super_text: |
Line 480... | Line 600... | ||
480 | mov edx, kmNone |
600 | mov edx, kmNone |
481 | .printFS: |
601 | .printFS: |
482 | ;mov esi, 8 |
602 | ;mov esi, 8 |
483 | mcall 4 |
603 | mcall 4 |
Line -... | Line 604... | ||
- | 604 | ||
- | 605 | ;button device |
|
- | 606 | mov ebx, (Otstup+80+30+delta +5) * 65536 + (60+3) |
|
- | 607 | mov edx, dword[kmDeviceID] |
|
- | 608 | shl edx, 2 |
|
- | 609 | add edx, deviceAdrStr |
|
- | 610 | mov edx, dword[edx] |
|
- | 611 | ;call setCurrentDeviceInEDX |
|
- | 612 | mcall 4 |
|
484 | 613 | ||
485 | ;buttons text |
614 | ;buttons text |
486 | mov ebx, (290+delta-Otstup-130+10+2) * 65536 + (277-3+dy) |
615 | mov ebx, (290+delta-Otstup-130+10+2+10) * 65536 + (277-3+dy) |
487 | mov ecx, 0x90FFFFFF |
616 | mov ecx, 0x90FFFFFF |
488 | mov eax, text.format |
617 | mov eax, text.format |
489 | mov edx, eax |
618 | mov edx, eax |
490 | mov esi, 6 |
619 | mov esi, 6 |
Line 498... | Line 627... | ||
498 | mcall 4 |
627 | mcall 4 |
Line 499... | Line 628... | ||
499 | 628 | ||
500 | pop esi edi edx ecx ebx eax |
629 | pop esi edi edx ecx ebx eax |
Line 501... | Line 630... | ||
501 | ret |
630 | ret |
502 | - | ||
503 | unittext: |
- | |
504 | .0 db '512 bytes', 0 |
- | |
505 | .1 db '1024 bytes', 0 |
- | |
506 | .2 db '2048 bytes', 0 |
- | |
507 | .3 db '4096 bytes', 0 |
- | |
508 | .4 db '8192 bytes', 0 |
- | |
509 | .5 db '16 Kb', 0 |
- | |
Line 510... | Line 631... | ||
510 | .6 db '32 Kb', 0 |
631 | |
511 | .7 db '64 Kb', 0 |
632 | |
512 | - | ||
513 | Buf: |
633 | |
514 | .1 db 'NONAME18',0,0 |
- | |
515 | ;.2 db 'FAT',0,0 ;100 dup(0) |
634 | Buf: |
Line 516... | Line 635... | ||
516 | .3 db 'hd0 [FAT32: 4Gb]',0,0 ;100 dup(0) |
635 | .1 db 'NONAME18',0,0 |
517 | ;.4 db '4096',0,0 ;100 dup(0) |
636 | ;.3 db 'hd0 [4Gb]',0,0 ;100 dup(0) |
518 | .5 rb 512 ;db '/rd/1/format/fat32mbr.bin', 0, 0 |
637 | .5 rb 512 ;db '/rd/1/format/fat32mbr.bin', 0, 0 |
Line 723... | Line 842... | ||
723 | lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i |
842 | lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i |
724 | lib1 l_libs lib1_name, sys_path, file_name, system_dir0, err_message_found_lib1, head_f_l, import_libkmenu,err_message_import1,head_f_i |
843 | lib1 l_libs lib1_name, sys_path, file_name, system_dir0, err_message_found_lib1, head_f_l, import_libkmenu,err_message_import1,head_f_i |
725 | load_lib_end: |
844 | load_lib_end: |
Line 726... | Line 845... | ||
726 | 845 | ||
727 | ;ðàçìåðû: 80 è 120 |
846 | ;ðàçìåðû: 80 è 120 |
728 | editLU edit_box 120,Otstup,60,0xffffff,0x6a9480,0,0xAABBCC,0,8,Buf.1, mouse_dd, 0,8,8 |
847 | editLabel edit_box 120,Otstup,60,0xffffff,0x6a9480,0,0xAABBCC,0,8,Buf.1, mouse_dd, 0,8,8 |
729 | editRU edit_box 120,Otstup+80+30+delta,60,0xffffff,0x6a9480,0,0xAABBCC,0,16,Buf.3, mouse_dd, 0,16,16 |
848 | ;editRU edit_box 120,Otstup+80+30+delta,60,0xffffff,0x6a9480,0,0xAABBCC,0,16,Buf.3, mouse_dd, 0,16,16 |
Line 730... | Line 849... | ||
730 | editMBR edit_box 290+delta-Otstup-52-Otstup-20,Otstup+20,210+dy,0xffffff,0x6a9480,0,0xAABBCC,0,255,Buf.5, mouse_dd, 0,0,0 ;25,25 |
849 | editMBR edit_box 290+delta-Otstup-52-Otstup-20,Otstup+20,210+dy,0xffffff,0x6a9480,0,0xAABBCC,0,255,Buf.5, mouse_dd, 0,0,0 ;25,25 |
Line 731... | Line 850... | ||
731 | 850 | ||
Line 740... | Line 859... | ||
740 | 859 | ||
741 | coordUnit: |
860 | coordUnit: |
742 | .x: rw 1 |
861 | .x: rw 1 |
Line -... | Line 862... | ||
- | 862 | .y: rw 1 |
|
- | 863 | ||
- | 864 | coordDevice: |
|
- | 865 | .x: rw 1 |
|
- | 866 | .y: rw 1 |
|
- | 867 | ||
- | 868 | kmDeviceID: rd 1 |
|
743 | .y: rw 1 |
869 | kmDevice: rd 1 |
744 | 870 | ||
Line 745... | Line 871... | ||
745 | kmUnitID: rd 1 |
871 | kmUnitID: rd 1 |
746 | kmUnit: rd 1 |
872 | kmUnit: rd 1 |
Line 756... | Line 882... | ||
756 | filename_area: rb 256 |
882 | filename_area: rb 256 |
757 | rb 1024 |
883 | rb 1024 |
758 | procinfo process_information |
884 | procinfo process_information |
759 | pi rb 1024 |
885 | pi rb 1024 |
Line -... | Line 886... | ||
- | 886 | ||
- | 887 | deviceAdrStr: rd maxDeviceCount |
|
760 | 888 | ||
761 | I_END: |
889 | I_END: |
762 | rb 256 |
890 | rb 256 |
763 | align 4 |
891 | align 4 |
764 | STACKTOP: |
892 | STACKTOP: |