Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 283 → Rev 314

/programs/fs/kfar/trunk/dialogs.inc
3,6 → 3,11
 
virtual at 0
dlgtemplate:
; ”« £¨:
; ¡¨â 0: ¨á¯®«ì§®¢ âì áâ ­¤ àâ­ë¥ æ¢¥â  ¤¨ «®£ 
; ¡¨â 1: ¨á¯®«ì§®¢ âì áâ ­¤ àâ­ë¥ æ¢¥â  ¯à¥¤ã¯à¥¦¤¥­¨ï/®è¨¡ª¨
; (¥á«¨ «î¡®© ¨§ íâ¨å ¡¨â®¢ ãáâ ­®¢«¥­, ¯®«ï main_color,border_color,header_color
; ¨£­®à¨àãîâáï)
.flags dd ?
.x dd ?
.y dd ?
58,7 → 63,28
or eax, -1
ret 8
.sizeok:
; set color if required
test byte [ebx+dlgtemplate.flags], 1
jz @f
mov edi, dialog_colors
jmp .setcolor
@@:
test byte [ebx+dlgtemplate.flags], 2
jz @f
mov edi, warning_colors
.setcolor:
mov al, [dialog_main_color-dialog_colors+edi]
mov [ebx+dlgtemplate.main_color], al
mov al, [dialog_border_color-dialog_colors+edi]
mov [ebx+dlgtemplate.border_color], al
mov al, [dialog_header_color-dialog_colors+edi]
mov [ebx+dlgtemplate.header_color], al
@@:
; allocate memory for data under dialog
; for 'No memory' dialog use static data area
mov ebp, nomem_dlgsavearea
cmp ebx, nomem_dlgdata
jz .allocated
mov eax, [ebx+dlgtemplate.width]
add eax, [ebx+dlgtemplate.border_size_x]
add eax, [ebx+dlgtemplate.border_size_x]
73,12 → 99,12
call mf_alloc
test eax, eax
jnz @f
; TODO: add error message
popad
or eax, -1
ret 8
@@:
mov ebp, eax
.allocated:
; save data
mov eax, [ebx+dlgtemplate.y]
add eax, [ebx+dlgtemplate.height]
402,8 → 428,11
push eax
call restore_console_data
call draw_keybar
cmp ebx, nomem_dlgdata
jz @f
mov eax, ebp
call mf_free
@@:
or [cursor_x], -1
or [cursor_y], -1
call draw_image
526,7 → 555,7
; +44: dd begin_variant
; +48: dd end_variant
; +52: dd cur_variant_idx
call mf_alloc
call xmalloc
test eax, eax
jnz @f
.ret_bad:
995,9 → 1024,10
push ManagerDlgProc
push dword [esp+8]
call GenericBox
ret 8
ret 4
 
ManagerDlgProc:
mov ebp, ebx
mov eax, [esp+8]
dec eax
jz .draw
1052,8 → 1082,7
mov eax, ebx
ret 16
@@:
mov ebx, [esp+4]
add ebx, dlgtemplate.size+12
lea ebx, [ebp+dlgtemplate.size+12]
.enter_find:
cmp [ebx+dlgitemtemplate.type], 2
jnz @f
1077,8 → 1106,7
jnz .btn_found
loop @b
.find_first_btn:
mov ebx, [esp+4]
add ebx, dlgtemplate.size+12
lea ebx, [ebp+dlgtemplate.size+12]
@@:
test [ebx+dlgitemtemplate.flags], 8
jnz .btn_found
1087,7 → 1115,7
.btn_found:
or byte [ebx+dlgitemtemplate.flags], 4
.ret_draw:
mov ebx, [esp+4]
mov ebx, ebp
call .dodraw
call draw_image
xor eax, eax
1097,8 → 1125,7
.up:
jecxz .ret0
and byte [ebx+dlgitemtemplate.flags], not 4
mov eax, [esp+4]
sub ecx, [eax+dlgtemplate.size+8]
sub ecx, [ebp+dlgtemplate.size+8]
neg ecx
jz .find_last_btn
@@:
1107,9 → 1134,9
loopz @b
jnz .btn_found
.find_last_btn:
mov ebx, [eax+dlgtemplate.size+8]
mov ebx, [ebp+dlgtemplate.size+8]
imul ebx, dlgitemtemplate.size
lea ebx, [ebx+eax+dlgtemplate.size+12]
lea ebx, [ebx+ebp+dlgtemplate.size+12]
@@:
sub ebx, dlgitemtemplate.size
test [ebx+dlgitemtemplate.flags], 8
1262,6 → 1289,9
draw_static_text:
; à¨á㥬 áâ â¨ç¥áª¨© ⥪áâ
mov ah, [dialog_main_color]
test byte [ebp+dlgtemplate.flags], 2
jz draw_text
mov ah, [warning_main_color]
draw_text:
; ®¯à¥¤¥«ï¥¬ ¤«¨­ã áâப¨
mov esi, [ebx+dlgitemtemplate.data]
1299,13 → 1329,12
xor eax, eax
.text_draw:
push ecx
mov ecx, [esp+24]
push eax
mov eax, [ebx+dlgitemtemplate.x1]
add eax, [ecx+dlgtemplate.x]
add eax, [ebp+dlgtemplate.x]
push edx
mov edx, [ebx+dlgitemtemplate.y1]
add edx, [ecx+dlgtemplate.y]
add edx, [ebp+dlgtemplate.y]
call get_console_ptr
pop edx
pop ecx
1337,9 → 1366,8
stosw
loop @b
.ret:
mov ecx, [esp+20]
mov eax, [ecx+dlgtemplate.x]
mov edx, [ecx+dlgtemplate.y]
mov eax, [ebp+dlgtemplate.x]
mov edx, [ebp+dlgtemplate.y]
add eax, [ebx+dlgitemtemplate.x2]
inc eax
add edx, [ebx+dlgitemtemplate.y1]
1354,10 → 1382,15
ret
 
draw_button:
mov ah, [dialog_normal_btn_color]
mov ecx, dialog_colors
test byte [ebp+dlgtemplate.flags], 2
jz @f
mov ecx, warning_colors
@@:
mov ah, [dialog_normal_btn_color-dialog_colors+ecx]
test [ebx+dlgitemtemplate.flags], 4
jz @f
mov ah, [dialog_selected_btn_color]
mov ah, [dialog_selected_btn_color-dialog_colors+ecx]
@@:
jmp draw_text
 
1368,19 → 1401,198
mov eax, [ebx+dlgitemtemplate.x1]
add eax, [edx+4]
sub eax, [edx+8]
mov ecx, [esp+16]
add eax, [ecx+dlgtemplate.x]
add eax, [ebp+dlgtemplate.x]
mov [cursor_x], eax
mov eax, [ebx+dlgitemtemplate.y1]
add eax, [ecx+dlgtemplate.y]
add eax, [ebp+dlgtemplate.y]
mov [cursor_y], eax
@@:
mov ah, [dialog_edit_color]
mov ecx, dialog_colors
test byte [ebp+dlgtemplate.flags], 2
jz @f
mov ecx, warning_colors
@@:
mov ah, [dialog_edit_color-dialog_colors+ecx]
test [ebx+dlgitemtemplate.flags], 10h
jnz @f
mov ah, [dialog_unmodified_edit_color]
mov ah, [dialog_unmodified_edit_color-dialog_colors+ecx]
@@:
mov esi, [ebx+dlgitemtemplate.data]
add esi, [edx+8]
add esi, 12
jmp draw_text_esi
 
; void __stdcall SayNoMem(void);
SayNoMem:
or dword [nomem_dlgdata+4], -1
or dword [nomem_dlgdata+8], -1
push nomem_dlgdata
call DialogBox
ret
 
; int __stdcall SayErr(const char* title, int x, int y,
; int num_strings, const char* strings[],
; int num_buttons, const char* buttons[]);
; may be x=-1 and/or y=-1
; [esp+4] = title
; [esp+8] = x
; [esp+12] = y
; [esp+16] = num_strings
; [esp+20] = strings
; [esp+24] = num_buttons
; [esp+28] = buttons
SayErr:
mov eax, [esp+16]
add eax, [esp+24]
imul eax, dlgitemtemplate.size
add eax, dlgtemplate.size+12
call xmalloc
test eax, eax
jnz @f
or eax, -1
ret 28
@@:
pushad
mov ebx, eax
mov edi, eax
mov eax, 2
stosd ; dlgtemplate.flags
mov eax, [esp+32+8]
stosd ; dlgtemplate.x
mov eax, [esp+32+12]
stosd ; dlgtemplate.y
; calculate width
mov ecx, [esp+32+16]
mov esi, [esp+32+20]
xor edx, edx
.calcwidth:
lodsd
@@:
inc eax
cmp byte [eax-1], 0
jnz @b
sub eax, [esi-4]
inc eax
cmp edx, eax
ja @f
mov edx, eax
@@:
loop .calcwidth
mov ecx, [esp+32+24]
mov esi, [esp+32+28]
xor ebp, ebp
.calcwidth2:
lodsd
@@:
inc eax
cmp byte [eax-1], 0
jnz @b
sub eax, [esi-4]
inc eax
add ebp, eax
loop .calcwidth2
inc ebp
inc ebp
cmp edx, ebp
ja @f
mov edx, ebp
@@:
mov eax, [cur_width]
sub eax, 8
cmp edx, eax
jb @f
mov edx, eax
@@:
mov eax, edx
stosd ; dlgtemplate.width
mov eax, [esp+32+16]
inc eax
stosd ; dlgtemplate.height
mov eax, 3
stosd ; dlgtemplate.border_size_x
mov al, 2
stosd ; dlgtemplate.border_size_y
mov eax, [esp+32+4]
stosd ; dlgtemplate.title
xor eax, eax
stosd ; (ignored)
stosd ; DlgProc
stosd ; userdata
mov eax, [esp+32+16]
add eax, [esp+32+24]
stosd ; num_items
; fill strings
xor ecx, ecx
mov esi, [esp+32+20]
@@:
mov eax, 1
stosd ; dlgitemtemplate.type
dec eax
stosd ; dlgitemtemplate.x1
mov eax, ecx
stosd ; dlgitemtemplate.y1
lea eax, [edx-1]
stosd ; dlgitemtemplate.x2
mov eax, ecx
stosd ; dlgitemtemplate.y2
movsd ; dlgitemtemplate.data
mov eax, 1
stosd ; dlgitemtemplate.flags
inc ecx
cmp ecx, [esp+32+16]
jb @b
; fill buttons
mov ecx, [esp+32+24]
mov esi, [esp+32+28]
sub edx, ebp
jc .big
shr edx, 1
inc edx
jmp .fillbtns
.big:
xor edx, edx
.fillbtns:
mov eax, 2
stosd ; dlgitemtemplate.type
mov eax, edx
stosd ; dlgitemtemplate.x1
mov eax, [ebx+dlgtemplate.height]
dec eax
stosd ; dlgitemtemplate.y1
push eax
lodsd
sub eax, edx
@@:
inc edx
cmp byte [eax+edx-1], 0
jnz @b
mov eax, edx
inc edx
stosd ; dlgitemtemplate.x2
pop eax
stosd ; dlgitemtemplate.y2
mov eax, [esi-4]
stosd ; dlgitemtemplate.data
mov eax, 9
cmp ecx, [esp+32+24]
jnz @f
or al, 4
@@:
stosd ; dlgitemtemplate.flags
loop .fillbtns
push ebx
call DialogBox
cmp eax, -1
jz @f
sub eax, ebx
sub eax, dlgtemplate.size+12
xor edx, edx
mov ecx, dlgitemtemplate.size
div ecx
sub eax, [esp+32+16]
@@:
mov [esp+28], eax
mov eax, ebx
call mf_free
popad
ret 28
/programs/fs/kfar/trunk/kfar.asm
14,6 → 14,7
include 'memalloc.inc'
include 'dialogs.inc'
include 'viewer.inc'
include 'tools.inc'
 
start:
mov eax, mem
61,14 → 62,18
mov eax, 8
call mf_alloc
mov [screens], eax
test eax, eax
jz exit
mov ecx, panels_vtable
mov [eax], ecx
mov [active_screen_vtable], ecx
call draw_keybar
call draw_cmdbar
mov [prev_dir], 0
mov ebp, panel1_data
call read_folder
call draw_panel
mov [bSilentFolderMode], 1
mov ebp, panel2_data
call read_folder
call draw_panel
112,7 → 117,7
int 0x40
xor eax, eax
; ebx, ecx, edi are ignored by function 0 after first redraw
mov edx, 0x13000000
mov edx, 0x53000000
int 0x40
mov al, 12
inc ebx
121,6 → 126,7
@@:
xor ecx, ecx
mov eax, [ebx+42]
mov [wnd_width], eax
sub eax, 5*2-1
jae @f
xor eax, eax
143,8 → 149,10
setnz cl
or cl, ch
test edx, edx
mov [fill_width], edx
setnz ch
mov eax, [ebx+46]
mov [wnd_height], eax
sub eax, [skinh]
sub eax, 5-1
jns @f
163,6 → 171,7
mov eax, 255
mov cl, 1
@@:
mov [fill_height], edx
cmp eax, [cur_height]
mov [cur_height], eax
jnz .resize
405,9 → 414,8
setz al
ret
 
; TODO: add "no memory" error handling
new_screen:
call mf_alloc
call xmalloc
test eax, eax
jnz @f
ret
417,7 → 425,7
inc ebx
shl ebx, 3
mov eax, [screens]
call mf_realloc
call xrealloc
test eax, eax
jnz @f
mov eax, ebp
461,7 → 469,7
mov ebx, [num_screens]
shl ebx, 3
mov eax, [screens]
call mf_realloc
call mf_realloc ; must succeed, because we decrease size
pop eax
call mf_free
and [active_screen], 0
484,7 → 492,7
add eax, 8
mov esi, eax
mul [num_screens]
call mf_alloc
call xmalloc
test eax, eax
jnz @f
ret
737,11 → 745,16
cmp byte [esi+2], 0
jz .dotdot
@@:
lea edi, [ebp + panel1_dir - panel1_data]
mov al, 0
or ecx, -1
repnz scasb
dec edi
push esi
lea esi, [ebp + panel1_dir - panel1_data]
mov edi, prev_dir
@@:
lodsb
stosb
test al, al
jnz @b
lea edi, [esi-1]
pop esi
mov al, '/'
cmp [edi-1], al
jz @f
879,7 → 892,7
test eax, eax
jnz .drive_loop_i_done
mov eax, 32+8
call mf_alloc
call xmalloc
test eax, eax
jz .drive_loop_i_done
jecxz @f
951,6 → 964,12
jz .ret2
lea esi, [eax+8]
lea edi, [ebp + panel1_dir - panel1_data]
push ecx esi edi
mov esi, edi
mov edi, prev_dir
mov ecx, 1024/4
rep movsd
pop edi esi ecx
@@:
lodsb
stosb
1068,12 → 1087,6
mov [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
add eax, aCancelBLength - 1
mov [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
mov al, [dialog_border_color]
mov [ebx + dlgtemplate.border_color], al
mov al, [dialog_header_color]
mov [ebx + dlgtemplate.header_color], al
mov al, [dialog_main_color]
mov [ebx + dlgtemplate.main_color], al
mov byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
and byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
and byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
1292,12 → 1305,6
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x1], eax
add eax, aCancelLength - 1
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x2], eax
mov al, [dialog_border_color]
mov [ebx + dlgtemplate.border_color], al
mov al, [dialog_header_color]
mov [ebx + dlgtemplate.header_color], al
mov al, [dialog_main_color]
mov [ebx + dlgtemplate.main_color], al
or byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags1], 4
and byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags2], not 4
push ebx
1428,7 → 1435,7
mov eax, ecx
@@:
add eax, 12
call mf_alloc
call xmalloc
test eax, eax
jz .menucreated
add eax, 4
1661,28 → 1668,38
imul ecx, font_height
lea ecx, [eax+ecx+5-1+100*65536]
xor eax, eax
mov edx, 0x13000000
mov edx, 0x53000000
mov edi, header
int 40h
mov al, 48
push 3
pop ebx
mov ecx, std_colors
push 40
pop edx
int 40h
; mov bl, 7
; int 40h
; xor ax, ax
; shr ebx, 16
; or ebx, eax
; mov ecx, [std_colors+16]
; mov edx, header
; push header.length
; pop esi
; push 4
; pop eax
; int 40h
mov al, 13
xor edx, edx
cmp [fill_width], 0
jz @f
mov ebx, [wnd_width]
sub ebx, [fill_width]
sub ebx, 5-1
shl ebx, 16
mov bx, word [fill_width]
mov ecx, [skinh-2]
mov cx, word [wnd_height]
sub cx, word [skinh]
sub cx, 5-1
int 0x40
@@:
cmp [fill_height], 0
jz @f
mov al, 13
xor edx, edx
mov ebx, 50000h
mov bx, word [wnd_width]
sub ebx, 9
mov ecx, [wnd_height]
sub ecx, [fill_height]
sub ecx, 5-1
shl ecx, 16
mov cx, word [fill_height]
int 0x40
@@:
; xor ecx, ecx
; call draw_image
and [min_x], 0
1935,6 → 1952,7
push 8
pop esi
mov edi, console_colors
xor ebp, ebp
int 0x40
push 64
pop eax
2611,6 → 2629,7
mov [dirinfo.dirdata], eax
lea eax, [ebp + panel1_dir - panel1_data]
mov [dirinfo.name], eax
.retry:
push 70
pop eax
mov ebx, dirinfo
2619,23 → 2638,77
jz .ok
cmp eax, 6
jz .ok
; TODO: add error handling
mov [ebp + panel1_numfiles - panel1_data], 2
mov eax, [ebp + panel1_nfa - panel1_data]
shl eax, 2
add eax, [ebp + panel1_files - panel1_data]
add eax, 32+40
mov word [eax], '..'
mov byte [eax+2], 0
add eax, 304
mov dword [eax], 'Read'
mov dword [eax+4], ' err'
mov dword [eax+8], 'or'
mov eax, [ebp + panel1_files - panel1_data]
mov dword [eax], 0
mov dword [eax+4], 304
; Failed to read folder, notify user
cmp [bSilentFolderMode], 0
jnz .dont_notify
push aContinue
push aRetry
mov edx, esp
call get_error_msg
push [dirinfo.name]
push aCannotReadFolder
push eax
mov eax, esp
push edx
push 2
push eax
push 3
push -1
push -1
push aError
call SayErr
add esp, 5*4
test eax, eax
jz .retry
.dont_notify:
mov esi, prev_dir
cmp byte [esi], 0
jz @f
lea edi, [ebp + panel1_dir - panel1_data]
mov ecx, 1024/4
rep movsd
mov byte [prev_dir], 0
ret
@@:
mov [bSilentFolderMode], 1 ; enter silent mode
mov esi, [dirinfo.name]
xor edx, edx
.up1:
lodsb
test al, al
jz .up1done
cmp al, '/'
jnz .up1
inc edx
lea edi, [esi-1]
jmp .up1
.up1done:
cmp edx, 2
jbe .noup
stosb
jmp read_folder
.noup:
mov esi, [dirinfo.name]
mov edi, esi
lodsd
or eax, 0x00202000
cmp eax, '/rd/'
jnz @f
lodsw
cmp ax, '1'
jz .nosetrd
@@:
mov eax, '/rd/'
stosd
mov ax, '1'
stosw
jmp read_folder
.nosetrd:
; „ ¦¥ à ¬¤¨áª ­¥ ¯à®ç¨â «áï. ‡­ ç¨â, ­¥ áã¤ì¡ ...
and dword [ebp + panel1_numfiles - panel1_data], 0
and dword [ebp + panel1_index - panel1_data], 0
and dword [ebp + panel1_start - panel1_data], 0
mov [bSilentFolderMode], 0 ; leave silent mode
ret
.ok:
mov eax, [dirinfo.dirdata]
2651,11 → 2724,10
push eax
imul eax, 4+304
add eax, 32
call mf_alloc
call xmalloc
test eax, eax
jnz .succ1
pop eax
; TODO: add error handling
jmp .readdone
.succ1:
mov [ebp + panel1_files - panel1_data], eax
2746,6 → 2818,7
mov edx, [ebp + panel1_files - panel1_data]
mov ecx, [ebp + panel1_numfiles - panel1_data]
call sort
mov [bSilentFolderMode], 0 ; leave silent mode
ret
 
compare_name:
3934,7 → 4007,7
pop esi
ret
 
header db 'Kolibri Far 0.19',0
header db 'Kolibri Far 0.2',0
 
nomem_draw db 'No memory for redraw.',0
.size = $ - nomem_draw
3942,6 → 4015,8
def_left_dir db '/rd/1',0
def_right_dir db '/hd0/1',0
 
bSilentFolderMode db 1
 
if lang eq ru
aFolder db ' ¯ª '
.size = $-aFolder
4310,6 → 4385,8
cur_height dd 25
saved_width dd -1
saved_height dd -1
fill_width dd 0
fill_height dd 0
max_width = 256
max_height = 256
console_data_ptr dd 0
4368,6 → 4445,25
dd keybar_viewer
dd viewer_getname
 
; additions to this table require changes in tools.inc::get_error_msg
errors1:
dd error0msg
dd error1msg
dd error2msg
dd error3msg
dd error4msg
dd error5msg
dd error6msg
dd error7msg
dd error8msg
dd error9msg
dd error10msg
dd error11msg
errors2:
dd error30msg
dd error31msg
dd error32msg
 
encodings:
.cp866 = 0
.cp1251 = 1
4565,13 → 4661,24
column_header_color db 1Eh
panel_nscreens_color db 0Bh
; „¨ «®£¨
dialog_colors:
dialog_main_color db 70h
dialog_border_color db 70h
dialog_header_color db 70h
dialog_edit_color db 30h
dialog_unmodified_edit_color db 38h
dialog_normal_btn_color db 70h
dialog_selected_btn_color db 30h
dialog_edit_color db 30h
dialog_unmodified_edit_color db 38h
; à¥¤ã¯à¥¦¤¥­¨ï ¨ ®è¨¡ª¨
warning_colors:
; !!! ¤®«¦­ë ¡ëâì ⥠¦¥ ¯®«ï ¨ ¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ ¤«ï ®¡ëç­ëå ¤¨ «®£®¢ !!!
warning_main_color db 4Fh
warning_border_color db 4Fh
warning_header_color db 4Fh
warning_edit_color db 30h
warning_unmodified_edit_color db 38h
warning_normal_btn_color db 4Fh
warning_selected_btn_color db 70h
; Œ¥­î
menu_normal_color db 3Fh
menu_selected_color db 0Fh
4754,8 → 4861,33
ctrlstate db 0
 
align 4
; ‘®®¡é¥­¨¥ ® ®¡«®¬¥ ¯à¨ ¢ë¤¥«¥­¨¨ ¯ ¬ïâ¨
nomem_dlgdata:
dd 2
dd -1
dd -1
dd 12
dd 2
dd 1
dd 1
dd aError
rb 4
dd 0
dd 0
dd 2
; áâப  "No memory"
dd 1
dd 1,0,10,0
dd aNoMemory
dd 1
; ª­®¯ª  "Ok"
dd 2
dd 4,1,7,1
dd aOk
dd 0xD
 
f8_confirm_dlgdata:
dd 0
dd 1
.x dd -1
.y dd -1
.width dd ?
4804,7 → 4936,7
 
; ¤¨ «®£ ª®¯¨à®¢ ­¨ï
copy_dlgdata:
dd 0
dd 1
.x dd -1
.y dd -1
.width dd ?
4869,6 → 5001,26
aCopyLength = $ - aCopy - 1
aCopy1 db 'Š®¯¨à®¢ âì "',0
aCopy2 db '" ¢:',0
aError db 'Žè¨¡ª ',0
aContinue db 'à®¤®«¦¨âì',0
aRetry db '®¢â®à¨âì',0
error0msg db '‘âà ­­®... ¥â ®è¨¡ª¨',0
error1msg db '‘âà ­­®... ¥ ®¯à¥¤¥«¥­  ¡ §  ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª ',0
error2msg db '”ã­ªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®© ä ©«®¢®© á¨á⥬ë',0
error3msg db '¥¨§¢¥áâ­ ï ä ©«®¢ ï á¨á⥬ ',0
error4msg db '‘âà ­­®... Žè¨¡ª  4',0
error5msg db '” ©« ­¥ ­ ©¤¥­',0
error6msg db '” ©« § ª®­ç¨«áï',0
error7msg db '‘âà ­­®... “ª § â¥«ì ¢­¥ ¯ ¬ï⨠¯à¨«®¦¥­¨ï',0
error8msg db '„¨áª § ¯®«­¥­',0
error9msg db '” ©«®¢ ï áâàãªâãà  à §àã襭 ',0
error10msg db '„®áâ㯠§ ¯à¥éñ­',0
error11msg db 'Žè¨¡ª  ãáâனá⢠',0
error30msg db '¥¤®áâ â®ç­® ¯ ¬ïâ¨',0
error31msg db '” ©« ­¥ ï¥âáï ¨á¯®«­ï¥¬ë¬',0
error32msg db '‘«¨èª®¬ ¬­®£® ¯à®æ¥áᮢ',0
aUnknownError db '¥¨§¢¥áâ­ë© ª®¤ ®è¨¡ª¨: ',0
aCannotReadFolder db '¥ ¬®£ã ¯à®ç¨â âì ¯ ¯ªã',0
else
aDeleteCaption db 'Delete',0
aConfirmDeleteText db 'Do you wish to delete ',0
4886,7 → 5038,29
aCopyLength = $ - aCopy - 1
aCopy1 db 'Copy "',0
aCopy2 db '" to:',0
aError db 'Error',0
aContinue db 'Continue',0
aRetry db 'Retry',0
error0msg db 'Strange... No error',0
error1msg db 'Strange... Hard disk base and/or partition not defined',0
error2msg db 'The file system does not support this function',0
error3msg db 'Unknown file system',0
error4msg db 'Strange... Error 4',0
error5msg db 'File not found',0
error6msg db 'End of file',0
error7msg db 'Strange... Pointer lies outside of application memory',0
error8msg db 'Disk is full',0
error9msg db 'File structure is destroyed',0
error10msg db 'Access denied',0
error11msg db 'Device error',0
error30msg db 'Not enough memory',0
error31msg db 'File is not executable',0
error32msg db 'Too many processes',0
aUnknownError db 'Unknown error code: ',0
aCannotReadFolder db 'Cannot read folder',0
end if
aOk db 'OK',0
aNoMemory db 'No memory!',0
 
execinfo:
dd 7
4941,6 → 5115,8
 
;console_data rb max_width*max_height*2
 
nomem_dlgsavearea rb (12+4)*(3+3)*2
 
cur_header rb max_width
tmp dd ?
 
4954,6 → 5130,9
used_width dd ?
used_height dd ?
 
wnd_width dd ?
wnd_height dd ?
 
column_left dd ?
column_top dd ?
column_width dd ?
4967,6 → 5146,10
procinfo rb 1024
lower_file_name = procinfo + 512
 
error_msg rb 128
 
prev_dir rb 1024
 
driveinfo rb 32+304
tmpname rb 32
 
/programs/fs/kfar/trunk/tools.inc
0,0 → 1,69
xmalloc:
; in: eax=size
; out: eax=pointer or NULL
call mf_alloc
.common:
test eax, eax
jnz @f
call SayNoMem
xor eax, eax
@@:
ret
 
xrealloc:
; in: eax=pointer, ebx=new size
; out: eax=pointer or NULL
call mf_realloc
jmp xmalloc.common
 
get_error_msg:
; in: eax=error code
; out: eax=pointer to message (in static buffer)
push esi edi
mov edi, error_msg
cmp eax, 11
ja .no1
mov esi, [errors1+eax*4]
jmp .copy
.no1:
cmp eax, 30
jb .no2
cmp eax, 32
ja .no2
mov esi, [errors2+(eax-30)*4]
.copy:
lodsb
stosb
test al, al
jnz .copy
.ret:
mov eax, error_msg
pop edi esi
ret
.no2:
mov esi, aUnknownError
push eax
@@:
lodsb
stosb
test al, al
jnz @b
pop eax
push edx ecx
test eax, eax
jns @f
mov byte [edi], '-'
inc edi
neg eax
@@:
xor edx, edx
mov ecx, 10
div ecx
add edx, '0'
mov byte [edi], dl
inc edi
test eax, eax
jnz @b
pop ecx edx
stosb
jmp .ret