Code:
ORG 0
BITS 32
; ---------------------------------------------------------------------------- ;
STACK_SIZE equ 256
; ---------------------------------------------------------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd start_
program.end dd end_
program.memory dd end_ + STACK_SIZE
program.stack dd end_ + STACK_SIZE
program.params dd 0
program.path dd 0
; ---------------------------------------------------------------------------- ;
start_:
call on_redraw
wait.event:
mov eax, 10
int 64
cmp eax, 1
jne key?
call on_redraw
jmp wait.event
key?:
cmp eax, 2
jne program.terminate
; get.key.code
; mov eax, 2
int 64
jmp wait.event
program.terminate:
or eax, -1
int 64
on_redraw:
; redraw.start
mov eax, 12
mov ebx, 1
int 64
; draw.window
xor eax, eax
mov ebx, 444
mov ecx, 444
mov edx, 33CCDDEEh
xor edi, edi
int 64
mov edi, (FolderNames.end - FolderNames) / 4
; ---------------------------------------------------------------------------- ;
next:
mov eax, [edi * 4 + FolderNames - 4]
mov [read.file_info.Folder], eax
; read.folder
mov eax, 70
mov ebx, read.file_info
int 64
; draw.text
mov edx, [eax * 4 + errors]
mov eax, 4
lea ebx, [edi * 4 + edi]
shl ebx, 1
add ebx, (80 + 10) << 16
mov ecx, 90090900h
int 64
; draw.text
mov edx, [edi * 4 + FolderNames - 4]
sub ebx, 80 << 16
int 64
dec edi
jnz next
; ---------------------------------------------------------------------------- ;
; redraw.finish
mov eax, 12
mov ebx, 2
int 64
ret
; ---------------------------------------------------------------------------- ;
read.file_info:
dd 1
dd 0
dd 0
dd 0
dd .buffer
db 0
.Folder dd 0
.buffer resb 32
; ---------------------------------------------------------------------------- ;
FolderNames:
dd .0
dd .1
dd .2
dd .3
dd .4
dd .5
dd .6
dd .7
dd .8
dd .9
dd .10
dd .11
dd .12
dd .13
dd .14
dd .15
dd .16
dd .17
dd .18
dd .19
dd .20
dd .21
dd .22
dd .23
.end:
; ---------------------------------------------------------------------------- ;
.0 db "",0
.1 db "/",0
.2 db "/bd0",0
.3 db "/bd0/",0
.4 db "/bd0/1",0
.5 db "/bd0/1/",0
.6 db "/hd0",0
.7 db "/hd0/",0
.8 db "/hd0/1",0
.9 db "/hd0/1/",0
.10 db "/cd2",0
.11 db "/cd2/",0
.12 db "/cd2/1",0
.13 db "/cd2/1/",0
.14 db "/rd",0
.15 db "/rd/",0
.16 db "/rd/1",0
.17 db "/rd/1/",0
.18 db "/tmp1",0
.19 db "/tmp1/",0
.20 db "/tmp1/1",0
.21 db "/tmp1/1/",0
.22 db "/sys",0
.23 db "/sys/",0
; ---------------------------------------------------------------------------- ;
errors:
dd .0
dd .1
dd .2
dd .3
dd .4
dd .5
dd .6
dd .7
dd .8
dd .9
dd .10
dd .11
; ---------------------------------------------------------------------------- ;
.0 db "0 = успешно",0
.1 db "1 = не определена база и/или раздел жёсткого диска" ,0
.2 db "2 = функция не поддерживается для данной файловой системы",0
.3 db "3 = неизвестная файловая система",0
.4 db "4 = зарезервировано, никогда не возвращается в текущей реализации",0
.5 db "5 = файл не найден",0
.6 db "6 = файл закончился",0
.7 db "7 = указатель вне памяти приложения",0
.8 db "8 = диск заполнен",0
.9 db "9 = таблица FAT разрушена",0
.10 db "10 = доступ запрещён",0
.11 db "11 = ошибка устройства",0
; ---------------------------------------------------------------------------- ;
end_: