/kernel/trunk/const.inc |
---|
138,8 → 138,6 |
TASK_DATA equ OS_BASE+0x0003020 |
TASK_EVENT equ OS_BASE+0x0003020 |
save_syscall_data equ OS_BASE+0x0005000 |
;mouseunder equ OS_BASE+0x0006900 |
FLOPPY_BUFF equ OS_BASE+0x0008000 |
ACTIVE_PROC_STACK equ OS_BASE+0x000A400 |
/kernel/trunk/core/syscall.inc |
---|
14,16 → 14,13 |
mov ds,ax |
mov es,ax |
; for syscall trace function |
call save_registers |
; load all registers in crossed order |
mov edi,[esp+28] ; eax |
mov eax,[esp+16] ; ebx |
mov ebx,[esp+24] ; ecx |
mov ecx,[esp+20] ; edx |
mov edx,[esp+4] ; esi |
mov esi,[esp+0] ; edi |
mov eax, ebx |
mov ebx, ecx |
mov ecx, edx |
mov edx, esi |
mov esi, edi |
mov edi, [esp+28] |
; enable interupts - a task switch or an IRQ _CAN_ interrupt i40 handler |
sti |
31,35 → 28,13 |
and edi,0xff |
call dword [servetable+edi*4] |
pop eax |
cli |
; cli |
popad |
pop es ds |
iretd |
align 4 |
save_registers: |
mov esi, [0x3010] |
mov eax, [esi+TASKDATA.pid] ; load PID |
lea esi, [esp+4] |
inc [save_syscall_count] |
mov edi,[save_syscall_count] |
and edi,0xF |
shl edi,6 |
add edi,save_syscall_data+32 |
mov [edi-32],eax |
mov ecx,32 / 4 |
cld |
rep movsd |
ret |
uglobal |
save_syscall_count dd 0x0 |
endg |
;label save_syscall_data dword at 0x5000 |
iglobal |
;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; SYSTEM FUNCTIONS TABLE ;; |
127,7 → 102,7 |
dd undefined_syscall ; 56-reserved |
dd undefined_syscall ; 57-reserved |
dd file_system ; 58-Common file system interface |
dd sys_trace ; 59-System call trace |
dd undefined_syscall ; 59-reserved |
dd sys_IPC ; 60-Inter Process Communication |
dd sys_gs ; 61-Direct graphics access |
dd sys_pci ; 62-PCI functions |
/kernel/trunk/docs/sysfuncr.txt |
---|
1,4 → 1,4 |
Kolibri 0.6.3.0 |
Kolibri 0.6.4.0 |
®¬¥à äãªæ¨¨ ¯®¬¥é ¥âáï ¢ ॣ¨áâà eax. |
맮¢ á¨á⥬®© äãªæ¨¨ ®áãé¥á⢫ï¥âáï ª®¬ ¤®© "int 0x40". |
851,8 → 851,8 |
db a,b,c,d ¤«ï ¢¥àᨨ a.b.c.d |
db UID_xxx: ®¤® ¨§ UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 |
db 'name',0 - ASCIIZ-áâப á ¨¬¥¥¬ |
«ï ï¤à Kolibri 0.6.3.0: |
db 0,6,3,0 |
«ï ï¤à Kolibri 0.6.4.0: |
db 0,6,4,0 |
db 2 |
db 'Kolibri',0 |
2717,6 → 2717,21 |
* ebx à §àãè ¥âáï |
====================================================================== |
==== ãªæ¨ï 53, ¯®¤äãªæ¨ï 10 - ¯®«ãç¨âì áâ âãá ª ¡¥«ï Ethernet. ==== |
====================================================================== |
à ¬¥âàë: |
* eax = 53 - ®¬¥à äãªæ¨¨ |
* ebx = 10 - ®¬¥à ¯®¤äãªæ¨¨ |
®§¢à é ¥¬®¥ § 票¥: |
* al = -1 - ¤à ©¢¥à á¥â¥¢®© ª àâë ¥ § £à㦥 ¨«¨ |
¥ ¯®¤¤¥à¦¨¢ ¥â íâã äãªæ¨î |
* al = 0 - ª ¡¥«ì ¥ ¯®¤ª«îçñ |
* al = 1 - ª ¡¥«ì ¯®¤ª«îçñ |
¬¥ç ¨ï: |
* ¥ªãé ï ॠ«¨§ æ¨ï ï¤à ¯®¤¤¥à¦¨¢ ¥â íâã äãªæ¨î |
⮫쪮 ¤«ï á¥â¥¢ëå ª àâ RTL8139. |
====================================================================== |
ãªæ¨ï 53, ¯®¤äãªæ¨ï 255 - ®â« ¤®ç ï ¨ä®à¬ æ¨ï á¥â¥¢®£® ¤à ©¢¥à . |
====================================================================== |
à ¬¥âàë: |
3129,55 → 3144,6 |
¢ ᥪâ®à å) ¨ ®¡é¥¥ ç¨á«® ª« áâ¥à®¢ ¤«ï ¦ñáâª¨å ¤¨áª®¢. |
====================================================================== |
=== ãªæ¨ï 59 - ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ¯®á«¥¤¨å á¨á⥬ëå ¢ë§®¢ å. == |
====================================================================== |
®«ãç ¥â ¤ ë¥ ® ¢á¥å á¨á⥬ëå ¢ë§®¢ å ¢á¥å ¯à®æ¥áᮢ. |
à ¬¥âàë: |
* eax = 59 - ®¬¥à äãªæ¨¨ |
* ebx = 0 - ¥¤¨á⢥ ï ¯®¤äãªæ¨ï |
* ecx = 㪠§ â¥«ì ¡ãä¥à |
* edx = à §¬¥à ¡ãä¥à |
®§¢à é ¥¬®¥ § 票¥: |
* eax = ®¡é¥¥ ç¨á«® á¨á⥬ëå ¢ë§®¢®¢, |
ᤥ« ëå á ¬®¬¥â § £à㧪¨ á¨á⥬ë (¯® ¬®¤ã«î 2^32) |
* ebx = 0 |
®à¬ â ¨ä®à¬ 樨 ®¡ ®¤®¬ ¢ë§®¢¥: (à §¬¥à = 0x40 = 64 ¡ ©â ) |
* +0: dword: PID ¯à®æ¥áá /¯®â®ª |
* +4: 7*dword: ¬ãá®à |
* +32 = +0x20: dword: § 票¥ edi ¯à¨ ¢ë§®¢¥ |
* +36 = +0x24: dword: esi |
* +40 = +0x28: dword: ebp |
* +44 = +0x2C: dword: 㪠§ ⥫ì áâíª ®¡à ¡®â稪 ï¤à |
* +48 = +0x30: dword: ebx |
* +52 = +0x34: dword: edx |
* +56 = +0x38: dword: ecx |
* +60 = +0x3C: dword: eax (=®¬¥à á¨á⥬®© äãªæ¨¨) |
¬¥ç ¨ï: |
* ãªæ¨ï ¨á¯®«ì§ã¥âáï ⮫쪮 ¢ ¯à¨«®¦¥¨¨ systrace. |
®¢®«ì® âà㤮 ¯à¥¤áâ ¢¨âì á¨âã æ¨î, ¢ ª®â®à®© íâ® ¯à¨«®¦¥¨¥ |
¨«¨ íâ äãªæ¨ï ¤¥©áâ¢¨â¥«ì® ¯®«¥§ë, ¢®â ¢á¥ á¨áâ¥¬ë¥ ¢ë§®¢ë |
¤«ï ¯®¤¤¥à¦ª¨ í⮩ äãªæ¨¨ ¥áª®«ìª® § ¬¥¤«ïîâáï |
(å®âï ¨ ¥ ¬®£®)... |
* á¢ï§¨ á í⨬ ¥áâì ¯à¥¤«®¦¥¨¥ ¯®¤¤¥à¦ªã í⮩ äãªæ¨¨ |
¨§ ï¤à ã¡à âì ᮢᥬ, ¢¬¥áâ¥ á ¯à¨«®¦¥¨¥¬ systrace. |
* ä®à¬ æ¨ï ® á¨á⥬ëå ¢ë§®¢ å á®åà ï¥âáï ¢ |
á¨á⥬®¬ ª®«ì楢®¬ ¡ãä¥à¥ 0x10 ¢å®¤®¢. |
â äãªæ¨ï ¯à®áâ® ª®¯¨àã¥â 㪠§ ë© ®¡êñ¬ ¤ ëå |
¨§ 㯮¬ïã⮣® ¡ãä¥à ¯® 㪠§ ®¬ã ¤à¥áã. |
* ª®© ¨§ ¢å®¤®¢ ¢ ¡ãä¥à¥ ᮮ⢥âáâ¢ã¥â ¯®á«¥¤¥¬ã ¢ë§®¢ã, |
¬®¦® ®¯à¥¤¥«¨âì ¯® § 票î eax, ¨¬¥®, |
¢å®¤ (eax and 0xF) (¯® ᬥ饨î (eax and 0xF)*0x40). |
* ⥪ã饩 ॠ«¨§ 樨 ¢®§¬®¦ë ।ª® ¢áâà¥ç î騥áï |
¯à®¡«¥¬ë à áá¨åந§ 樨, ª®£¤ ® ¥ª®â®àëå ¢ë§®¢ å |
¨ä®à¬ æ¨ï ãáâ ॢ ¥â. |
* ®¤ á¨áâ¥¬ë© ¡ãä¥à ¢ë¤¥«¥ áâà ¨æ , 4¡. |
§¬¥à ¢å®¤ = 64 ¡ ©â . |
®ç¥¬ã ¨á¯®«ì§ã¥âáï ⮫쪮 16 ¢å®¤®¢ - ¥¯®ïâ®. |
* 票¥ esp ¢ ¬®¬¥â á¨á⥬®£® ¢ë§®¢ |
í⮩ äãªæ¨¥© 㧠âì ¥«ì§ï. |
* ஢¥àª¨ ª®à४â®á⨠edx ¢ ⥪ã饩 ॠ«¨§ 樨 ¥ ¤¥« ¥âáï. |
====================================================================== |
=========== ãªæ¨ï 60 - Inter Process Communication (IPC). ========== |
====================================================================== |
IPC ¯à¨¬¥ï¥âáï ¤«ï ¯®áë«®ª á®®¡é¥¨© ®â ®¤®£® ¯à®æ¥áá /¯®â®ª |
3469,8 → 3435,11 |
* ebx = 㪠§ â¥«ì ¨§®¡à ¦¥¨¥ |
* ecx = [à §¬¥à ¯® ®á¨ x]*65536 + [à §¬¥à ¯® ®á¨ y] |
* edx = [ª®®à¤¨ â ¯® ®á¨ x]*65536 + [ª®®à¤¨ â ¯® ®á¨ y] |
* esi = ç¨á«® ¡¨â ¯¨ªá¥«ì, ¤®«¦® ¡ëâì 8 ¢ ⥪ã饩 ॠ«¨§ 樨 |
* edi = 㪠§ â¥«ì ¯ «¨âàã (256 梥⮢ 0x00RRGGBB) |
* esi = ç¨á«® ¡¨â ¯¨ªá¥«ì, ¤®«¦® ¡ëâì 8, 24 ¨«¨ 32 |
* edi = 㪠§ â¥«ì ¯ «¨âàã (256 梥⮢ 0x00RRGGBB); |
¨£®à¨àã¥âáï ¯à¨ esi = 24 ¨ 32 |
* ebp = ᬥ饨¥ ¤ ëå ª ¦¤®© á«¥¤ãî饩 áâப¨ ¨§®¡à ¦¥¨ï |
®â®á¨â¥«ì® ¯à¥¤ë¤ã饩 |
®§¢à é ¥¬®¥ § 票¥: |
* äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
¬¥ç ¨ï: |
3480,6 → 3449,8 |
* ¦¤ë© ¡ ©â ¨§®¡à ¦¥¨ï à áᬠâਢ ¥âáï ª ª ¨¤¥ªá ¢ ¯ «¨âà¥. |
* ᫨ ¨§®¡à ¦¥¨¥ ¨á¯®«ì§ã¥â ¥ ¢á¥ 256 梥⮢, ¬¥ìè¥, |
à §¬¥à ¯ «¨âàë ¬®¦¥â ¡ëâì ¬¥ìè¥ 256. |
* 맮¢ äãªæ¨¨ 7 íª¢¨¢ «¥â¥ ¢ë§®¢ã í⮩ äãªæ¨¨ á ¯ à ¬¥âà ¬¨ |
esi=24, ebp=0. |
====================================================================== |
================= ãªæ¨ï 66 - à ¡®â á ª« ¢¨ âãன. ================= |
/kernel/trunk/docs/sysfuncs.txt |
---|
1,4 → 1,4 |
SYSTEM FUNCTIONS of OS Kolibri 0.6.3.0 |
SYSTEM FUNCTIONS of OS Kolibri 0.6.4.0 |
Number of the function is located in the register eax. |
The call of the system function is executed by "int 0x40" command. |
850,8 → 850,8 |
db a,b,c,d for version a.b.c.d |
db UID_xxx: one of UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 |
db 'name',0 - ASCIIZ-string with the name |
For Kolibri 0.6.3.0 kernel: |
db 0,6,3,0 |
For Kolibri 0.6.4.0 kernel: |
db 0,6,4,0 |
db 2 |
db 'Kolibri',0 |
2693,6 → 2693,21 |
* ebx destroyed |
====================================================================== |
===== Function 53, subfunction 10 - query Ethernet cable status. ===== |
====================================================================== |
Parameters: |
* eax = 53 - function number |
* ebx = 10 - subfunction number |
Returned value: |
* al = -1 - a network driver is not loaded or |
does not support this function |
* al = 0 - Ethernet cable is unplugged |
* al = 1 - Ethernet cable is plugged |
Remarks: |
* The current kernel implementation supports this function |
only for RTL8139 network cards. |
====================================================================== |
= Function 53, subfunction 255 - debug information of network driver. |
====================================================================== |
Parameters: |
3101,55 → 3116,6 |
for hard disks. |
====================================================================== |
=============== Function 59 - trace last system calls. =============== |
====================================================================== |
Gets data on all system calls of all processes. |
Parameters: |
* eax = 59 - function number |
* ebx = 0 - unique subfunction |
* ecx = pointer to the buffer |
* edx = size of the buffer |
Returned value: |
* eax = total number of system calls made from system boot |
(modulo 2^32) |
* ebx = 0 |
Format of information on one call: (size = 0x40 = 64 bytes) |
* +0: dword: PID of process/thread |
* +4: 7*dword: garbage |
* +32 = +0x20: dword: value of edi at the call |
* +36 = +0x24: dword: esi |
* +40 = +0x28: dword: ebp |
* +44 = +0x2C: dword: stack pointer of the kernel handler |
* +48 = +0x30: dword: ebx |
* +52 = +0x34: dword: edx |
* +56 = +0x38: dword: ecx |
* +60 = +0x3C: dword: eax (=number of system function) |
Remarks: |
* The function is used only in the application 'systrace'. |
It is rather difficult to imagine a situation, in which |
this application or this function are really useful; |
and all system calls for support of this function are a little |
decelerated (though not strongly)... |
* So there is a proposition to delete from the kernel |
support of this function, together with application 'systrace'. |
* The information on system calls saves in the system |
ring buffer with 0x10 entries. |
This function simply copies the given size of data |
from this buffer to the given address. |
* One can determine, which entry in the buffer corresponds to |
last system call, by value of eax, namely, it is the entry |
(eax and 0xF) (at offset (eax and 0xF)*0x40). |
* In the current implementation there can be the seldom |
meeting problems of unsynchronization, when the information |
on some calls becomes outdated. |
* Under the system buffer one page, 4Kb, is allocated. |
Size of an entry = 64 bytes. Why only 16 entries are used, |
is not clearly. |
* The value of esp at the moment of system call cannot |
be determined by this function. |
* The current implementation does not check edx for correctness. |
====================================================================== |
========== Function 60 - Inter Process Communication (IPC). ========== |
====================================================================== |
IPC is used for message dispatching from one process/thread to |
3436,8 → 3402,10 |
* ebx = pointer to the image |
* ecx = [size on axis x]*65536 + [size on axis y] |
* edx = [coordinate on axis x]*65536 + [coordinate on axis y] |
* esi = number of bits per pixel, must be 8 |
* edi = pointer to palette (256 colors 0x00RRGGBB) |
* esi = number of bits per pixel, must be 8, 24 or 32 |
* edi = pointer to palette (256 colors 0x00RRGGBB); |
ignored when esi = 24 and 32 |
* ebp = offset of next row data relative to previous row data |
Returned value: |
* function does not return value |
Remarks: |
3447,6 → 3415,8 |
* Each byte of image is index in the palette. |
* If the image uses less than 256 colors, palette size may be |
less than 256 too. |
* The call to function 7 is equivalent to call to this function |
with esi=24, ebp=0. |
====================================================================== |
================== Function 66 - work with keyboard. ================= |
/kernel/trunk/kernel.asm |
---|
231,7 → 231,7 |
char2 db 'FONTS/CHAR2.MT',0 |
bootpath db '/KOLIBRI ' |
bootpath2 db 0 |
vmode db 'VMODE MDR' |
vmode db 'VMODE.MDR',0 |
vrr_m db '/rd/1/VRR_M',0 |
endg |
3977,7 → 3977,7 |
add dx,word[edi+0x80000+APPDATA.wnd_clientbox.left] |
rol edx,16 |
.forced: |
push esi ebp |
push ebp esi 0 |
mov ebp, putimage_get24bpp |
mov esi, putimage_init24bpp |
sys_putimage_bpp: |
3996,7 → 3996,7 |
inc [mouse_pause] |
call eax |
dec [mouse_pause] |
pop ebp esi |
pop ebp esi ebp |
jmp [draw_pointer] |
syscall_putimage_palette: |
4009,8 → 4009,9 |
; ebx = pointer to image |
; ecx = [xsize]*65536 + [ysize] |
; edx = [xstart]*65536 + [ystart] |
; esi = number of bits per pixel, must be 8 |
; esi = number of bits per pixel, must be 8, 24 or 32 |
; edi = pointer to palette |
; ebp = row delta |
mov eax, [0x3000] |
shl eax, 8 |
add dx, word [eax+0x80000+APPDATA.wnd_clientbox.top] |
4018,10 → 4019,27 |
add dx, word [eax+0x80000+APPDATA.wnd_clientbox.left] |
rol edx, 16 |
.forced: |
push esi ebp |
push ebp esi ebp |
cmp esi, 8 |
jnz @f |
mov ebp, putimage_get8bpp |
mov esi, putimage_init8bpp |
jmp sys_putimage_bpp |
@@: |
cmp esi, 24 |
jnz @f |
mov ebp, putimage_get24bpp |
mov esi, putimage_init24bpp |
jmp sys_putimage_bpp |
@@: |
cmp esi, 32 |
jnz @f |
mov ebp, putimage_get32bpp |
mov esi, putimage_init32bpp |
jmp sys_putimage_bpp |
@@: |
pop ebp esi |
ret |
putimage_init24bpp: |
lea eax, [eax*3] |
4041,6 → 4059,13 |
inc esi |
ret 4 |
putimage_init32bpp: |
shl eax, 2 |
ret |
putimage_get32bpp: |
lodsd |
ret 4 |
; eax x beginning |
; ebx y beginning |
; ecx x end |
4417,28 → 4442,6 |
sys_trace: |
test eax, eax ; get event data |
jnz no_get_sys_events |
mov esi,save_syscall_data ; data |
mov edi,[0x3010] |
mov edi,[edi+TASKDATA.mem_start] |
add edi,ebx |
cld |
rep movsb |
mov [esp+24],dword 0 |
mov eax,[save_syscall_count] ; count |
mov [esp+36],eax |
ret |
no_get_sys_events: |
ret |
sys_process_def: |
mov edi, [0x3000] |
/kernel/trunk/memmap.inc |
---|
54,8 → 54,7 |
; 3c dword cpu usage in cpu timer tics |
; |
; |
; 5000 -> 5FFF save_syscall_data - syscall trace |
; 6000 -> 68FF free |
; 5000 -> 68FF free |
; 6900 -> 6EFF saved picture under mouse pointer |
; |
; 6F00 -> 6FFF free |
/kernel/trunk/video/vesa12.inc |
---|
844,6 → 844,7 |
pop edi |
add edi,[0xfe08] |
add esi,[esp+32] |
dec ebx |
jnz newpi12 |
/kernel/trunk/video/vesa20.inc |
---|
82,6 → 82,13 |
.edi dd ? |
.esi dd ? |
.ebp dd ? |
.esp dd ? |
.ebx dd ? |
.edx dd ? |
.ecx dd ? |
.eax dd ? |
.ret_addr dd ? |
.arg_0 dd ? |
end virtual |
align 16 |
164,6 → 171,7 |
;; imul eax, [putimg.source_bpp] |
; lea eax, [eax + eax * 2] |
call esi |
add eax, [putimg.arg_0] |
mov [putimg.line_increment], eax |
; winmap new line increment |
/kernel/trunk/vmodeld.inc |
---|
10,9 → 10,6 |
; |
;vmode db 'VMODE MDR' ; MDR - Menuet Driver |
; must be located after fonts filenames in kernel.asm |
; LOAD VIDEOMODE DRIVER |
; If vmode.mdr file not found |
or eax,-1 ; Driver ID = -1 (not present in system) |
19,9 → 16,8 |
mov [0x760000],eax ; |
mov [0x760100],byte 0xC3 ; Instruction RETN - driver loop |
mov eax,vmode ; File name of driver |
mov esi,12 |
mov ebx,0 |
mov ecx,26000 |
mov esi, vmode |
xor ebx, ebx |
mov ecx, 0x8000 ; size of memory area for driver |
mov edx,0x760000 ; Memory position of driver |
call fileread |
call fs_RamdiskRead |
/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 |