forked from KolibriOS/kolibrios
* Modified sysfunction 65 (see documentation), use new KFAR
* Deleted useless sysfunction 59 (syscalls trace) * Load vmode.mdr via new file subsystem * KFar 0.2 git-svn-id: svn://kolibrios.org@314 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e7d381a4b4
commit
822a9715c4
@ -138,8 +138,6 @@ TASK_BASE equ OS_BASE+0x0003010
|
||||
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
|
||||
|
@ -14,16 +14,13 @@ i40:
|
||||
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,34 +28,12 @@ i40:
|
||||
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
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -127,7 +102,7 @@ iglobal
|
||||
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
|
||||
|
@ -1,4 +1,4 @@
|
||||
‘ˆ‘’…Œ<EFBFBD>›… ”“<E2809D>Š–ˆˆ Ž<>…<EFBFBD>€–ˆŽ<CB86><C5BD>Ž‰ ‘ˆ‘’…Œ› Kolibri 0.6.3.0
|
||||
‘ˆ‘’…Œ<EFBFBD>›… ”“<E2809D>Š–ˆˆ Ž<>…<EFBFBD>€–ˆŽ<CB86><C5BD>Ž‰ ‘ˆ‘’…Œ› Kolibri 0.6.4.0
|
||||
|
||||
<EFBFBD>®¬¥à äãªæ¨¨ ¯®¬¥é ¥âáï ¢ ॣ¨áâà 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
|
||||
|
||||
@ -2716,6 +2716,21 @@ dword-
|
||||
* eax = 1 - ¯®àâ ᢮¡®¤¥
|
||||
* ebx à §àãè ¥âáï
|
||||
|
||||
======================================================================
|
||||
==== ”ãªæ¨ï 53, ¯®¤äãªæ¨ï 10 - ¯®«ãç¨âì áâ âãá ª ¡¥«ï Ethernet. ====
|
||||
======================================================================
|
||||
<EFBFBD> à ¬¥âàë:
|
||||
* eax = 53 - ®¬¥à äãªæ¨¨
|
||||
* ebx = 10 - ®¬¥à ¯®¤äãªæ¨¨
|
||||
‚®§¢à é ¥¬®¥ § 票¥:
|
||||
* al = -1 - ¤à ©¢¥à á¥â¥¢®© ª àâë ¥ § £à㦥 ¨«¨
|
||||
¥ ¯®¤¤¥à¦¨¢ ¥â íâã äãªæ¨î
|
||||
* al = 0 - ª ¡¥«ì ¥ ¯®¤ª«îçñ
|
||||
* al = 1 - ª ¡¥«ì ¯®¤ª«îçñ
|
||||
‡ ¬¥ç ¨ï:
|
||||
* ’¥ªãé ï ॠ«¨§ æ¨ï ï¤à ¯®¤¤¥à¦¨¢ ¥â íâã äãªæ¨î
|
||||
⮫쪮 ¤«ï á¥â¥¢ëå ª àâ RTL8139.
|
||||
|
||||
======================================================================
|
||||
”ãªæ¨ï 53, ¯®¤äãªæ¨ï 255 - ®â« ¤®ç ï ¨ä®à¬ æ¨ï á¥â¥¢®£® ¤à ©¢¥à .
|
||||
======================================================================
|
||||
@ -3128,55 +3143,6 @@ dword-
|
||||
¯®¤á¨áâ¥¬ë ¬®¦® ®¯à¥¤¥«¨âì à §¬¥à ª« áâ¥à (â ¬ ® åà ¨âáï
|
||||
¢ ᥪâ®à å) ¨ ®¡é¥¥ ç¨á«® ª« áâ¥à®¢ ¤«ï ¦ñáâª¨å ¤¨áª®¢.
|
||||
|
||||
======================================================================
|
||||
=== ”ãªæ¨ï 59 - ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ¯®á«¥¤¨å á¨á⥬ëå ¢ë§®¢ å. ==
|
||||
======================================================================
|
||||
<EFBFBD>®«ãç ¥â ¤ ë¥ ® ¢á¥å á¨á⥬ëå ¢ë§®¢ å ¢á¥å ¯à®æ¥áᮢ.
|
||||
<EFBFBD> à ¬¥âàë:
|
||||
* 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 ¢å®¤®¢.
|
||||
<20>â äãªæ¨ï ¯à®áâ® ª®¯¨àã¥â 㪠§ ë© ®¡êñ¬ ¤ ëå
|
||||
¨§ 㯮¬ïã⮣® ¡ãä¥à ¯® 㪠§ ®¬ã ¤à¥áã.
|
||||
* Š ª®© ¨§ ¢å®¤®¢ ¢ ¡ãä¥à¥ ᮮ⢥âáâ¢ã¥â ¯®á«¥¤¥¬ã ¢ë§®¢ã,
|
||||
¬®¦® ®¯à¥¤¥«¨âì ¯® § 票î eax, ¨¬¥®,
|
||||
¢å®¤ (eax and 0xF) (¯® ᬥ饨î (eax and 0xF)*0x40).
|
||||
* ‚ ⥪ã饩 ॠ«¨§ 樨 ¢®§¬®¦ë ।ª® ¢áâà¥ç î騥áï
|
||||
¯à®¡«¥¬ë à áá¨åந§ 樨, ª®£¤ ® ¥ª®â®àëå ¢ë§®¢ å
|
||||
¨ä®à¬ æ¨ï ãáâ ॢ ¥â.
|
||||
* <20>®¤ á¨áâ¥¬ë© ¡ãä¥à ¢ë¤¥«¥ áâà ¨æ , 4Š¡.
|
||||
<20> §¬¥à ¢å®¤ = 64 ¡ ©â .
|
||||
<20>®ç¥¬ã ¨á¯®«ì§ã¥âáï ⮫쪮 16 ¢å®¤®¢ - ¥¯®ïâ®.
|
||||
* ‡ 票¥ esp ¢ ¬®¬¥â á¨á⥬®£® ¢ë§®¢
|
||||
í⮩ äãªæ¨¥© 㧠âì ¥«ì§ï.
|
||||
* <20>஢¥àª¨ ª®à४â®á⨠edx ¢ ⥪ã饩 ॠ«¨§ 樨 ¥ ¤¥« ¥âáï.
|
||||
|
||||
======================================================================
|
||||
=========== ”ãªæ¨ï 60 - Inter Process Communication (IPC). ==========
|
||||
======================================================================
|
||||
@ -3469,8 +3435,11 @@ IPC
|
||||
* 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 @@ IPC
|
||||
* Š ¦¤ë© ¡ ©â ¨§®¡à ¦¥¨ï à áᬠâਢ ¥âáï ª ª ¨¤¥ªá ¢ ¯ «¨âà¥.
|
||||
* …᫨ ¨§®¡à ¦¥¨¥ ¨á¯®«ì§ã¥â ¥ ¢á¥ 256 梥⮢, ¬¥ìè¥,
|
||||
à §¬¥à ¯ «¨âàë ¬®¦¥â ¡ëâì ¬¥ìè¥ 256.
|
||||
* ‚맮¢ äãªæ¨¨ 7 íª¢¨¢ «¥â¥ ¢ë§®¢ã í⮩ äãªæ¨¨ á ¯ à ¬¥âà ¬¨
|
||||
esi=24, ebp=0.
|
||||
|
||||
======================================================================
|
||||
================= ”ãªæ¨ï 66 - à ¡®â á ª« ¢¨ âãன. =================
|
||||
|
@ -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 @@ Structure of the buffer:
|
||||
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
|
||||
|
||||
@ -2692,6 +2692,21 @@ Returned value:
|
||||
* eax = 1 - port is free
|
||||
* 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.
|
||||
======================================================================
|
||||
@ -3100,55 +3115,6 @@ Remarks:
|
||||
it is stored in sectors) and total number of clusters
|
||||
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). ==========
|
||||
======================================================================
|
||||
@ -3436,8 +3402,10 @@ Parameters:
|
||||
* 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 @@ Remarks:
|
||||
* 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. =================
|
||||
|
@ -231,7 +231,7 @@ iglobal
|
||||
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 @@ sys_putimage:
|
||||
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 @@ sys_putimage_bpp:
|
||||
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 @@ sys_putimage_palette:
|
||||
; 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 @@ sys_putimage_palette:
|
||||
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 @@ putimage_get8bpp:
|
||||
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_msg_board:
|
||||
|
||||
|
||||
|
||||
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]
|
||||
|
||||
|
@ -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
|
||||
|
@ -844,6 +844,7 @@ vesa12_putimage:
|
||||
pop edi
|
||||
|
||||
add edi,[0xfe08]
|
||||
add esi,[esp+32]
|
||||
dec ebx
|
||||
jnz newpi12
|
||||
|
||||
|
@ -82,6 +82,13 @@ virtual at esp
|
||||
.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 @@ vesa20_putimage:
|
||||
;; 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
|
||||
|
@ -10,18 +10,14 @@
|
||||
;
|
||||
|
||||
|
||||
;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)
|
||||
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 edx,0x760000 ; Memory position of driver
|
||||
call fileread
|
||||
mov esi, vmode
|
||||
xor ebx, ebx
|
||||
mov ecx, 0x8000 ; size of memory area for driver
|
||||
mov edx, 0x760000 ; Memory position of driver
|
||||
call fs_RamdiskRead
|
@ -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 @@ GenericBox:
|
||||
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 @@ GenericBox:
|
||||
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 @@ GenericBox:
|
||||
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 @@ menu_centered_in:
|
||||
; +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 @@ DialogBox:
|
||||
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 @@ ManagerDlgProc:
|
||||
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 @@ ManagerDlgProc:
|
||||
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 @@ ManagerDlgProc:
|
||||
.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 @@ ManagerDlgProc:
|
||||
.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 @@ ManagerDlgProc:
|
||||
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 @@ ManagerDlgProc:
|
||||
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 @@ draw_text_esi:
|
||||
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 @@ draw_text_esi:
|
||||
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 @@ draw_text_esi:
|
||||
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 @@ draw_editbox:
|
||||
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
|
||||
|
@ -14,6 +14,7 @@ include 'kglobals.inc'
|
||||
include 'memalloc.inc'
|
||||
include 'dialogs.inc'
|
||||
include 'viewer.inc'
|
||||
include 'tools.inc'
|
||||
|
||||
start:
|
||||
mov eax, mem
|
||||
@ -61,14 +62,18 @@ start:
|
||||
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 @@ redraw:
|
||||
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 @@ redraw:
|
||||
@@:
|
||||
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 @@ redraw:
|
||||
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 @@ redraw:
|
||||
mov eax, 255
|
||||
mov cl, 1
|
||||
@@:
|
||||
mov [fill_height], edx
|
||||
cmp eax, [cur_height]
|
||||
mov [cur_height], eax
|
||||
jnz .resize
|
||||
@ -405,9 +414,8 @@ ctrlkey_test4:
|
||||
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 @@ new_screen:
|
||||
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 @@ delete_active_screen:
|
||||
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 @@ F12:
|
||||
add eax, 8
|
||||
mov esi, eax
|
||||
mul [num_screens]
|
||||
call mf_alloc
|
||||
call xmalloc
|
||||
test eax, eax
|
||||
jnz @f
|
||||
ret
|
||||
@ -737,11 +745,16 @@ panels_OnKey:
|
||||
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 @@ panels_OnKey:
|
||||
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 @@ panels_OnKey:
|
||||
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 @@ panels_OnKey:
|
||||
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 @@ panels_OnKey:
|
||||
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 @@ panels_OnKey:
|
||||
mov eax, ecx
|
||||
@@:
|
||||
add eax, 12
|
||||
call mf_alloc
|
||||
call xmalloc
|
||||
test eax, eax
|
||||
jz .menucreated
|
||||
add eax, 4
|
||||
@ -1661,28 +1668,38 @@ draw_window:
|
||||
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 @@ end if
|
||||
push 8
|
||||
pop esi
|
||||
mov edi, console_colors
|
||||
xor ebp, ebp
|
||||
int 0x40
|
||||
push 64
|
||||
pop eax
|
||||
@ -2611,6 +2629,7 @@ read_folder:
|
||||
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 @@ read_folder:
|
||||
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 @@ read_folder:
|
||||
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 @@ sort_files:
|
||||
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 @@ find_extension:
|
||||
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 @@ nomem_draw db 'No memory for redraw.',0
|
||||
def_left_dir db '/rd/1',0
|
||||
def_right_dir db '/hd0/1',0
|
||||
|
||||
bSilentFolderMode db 1
|
||||
|
||||
if lang eq ru
|
||||
aFolder db '<27> ¯ª '
|
||||
.size = $-aFolder
|
||||
@ -4310,6 +4385,8 @@ cur_width dd 80
|
||||
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 @@ viewer_vtable:
|
||||
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 @@ panel_active_header_color db 30h
|
||||
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_normal_btn_color db 70h
|
||||
dialog_selected_btn_color db 30h
|
||||
dialog_edit_color db 30h
|
||||
dialog_unmodified_edit_color db 38h
|
||||
dialog_normal_btn_color db 70h
|
||||
dialog_selected_btn_color db 30h
|
||||
; <20>।ã¯à¥¦¤¥¨ï ¨ ®è¨¡ª¨
|
||||
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 @@ bWasE0 db 0
|
||||
ctrlstate db 0
|
||||
|
||||
align 4
|
||||
f8_confirm_dlgdata:
|
||||
; ‘®®¡é¥¨¥ ® ®¡«®¬¥ ¯à¨ ¢ë¤¥«¥¨¨ ¯ ¬ïâ¨
|
||||
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 1
|
||||
.x dd -1
|
||||
.y dd -1
|
||||
.width dd ?
|
||||
@ -4804,7 +4936,7 @@ f8_confirm_dlgdata:
|
||||
|
||||
; ¤¨ «®£ ª®¯¨à®¢ ¨ï
|
||||
copy_dlgdata:
|
||||
dd 0
|
||||
dd 1
|
||||
.x dd -1
|
||||
.y dd -1
|
||||
.width dd ?
|
||||
@ -4869,6 +5001,26 @@ aCopy db '[
|
||||
aCopyLength = $ - aCopy - 1
|
||||
aCopy1 db 'Š®¯¨à®¢ âì "',0
|
||||
aCopy2 db '" ¢:',0
|
||||
aError db 'Žè¨¡ª ',0
|
||||
aContinue db '<27>த®«¦¨âì',0
|
||||
aRetry db '<27>®¢â®à¨âì',0
|
||||
error0msg db '‘âà ®... <20>¥â ®è¨¡ª¨',0
|
||||
error1msg db '‘âà ®... <20>¥ ®¯à¥¤¥«¥ ¡ § ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª ',0
|
||||
error2msg db '”ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ®© ä ©«®¢®© á¨á⥬ë',0
|
||||
error3msg db '<27>¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ',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 '<27>¥¤®áâ â®ç® ¯ ¬ïâ¨',0
|
||||
error31msg db '” ©« ¥ ï¥âáï ¨á¯®«ï¥¬ë¬',0
|
||||
error32msg db '‘«¨èª®¬ ¬®£® ¯à®æ¥áᮢ',0
|
||||
aUnknownError db '<27>¥¨§¢¥áâë© ª®¤ ®è¨¡ª¨: ',0
|
||||
aCannotReadFolder db '<27>¥ ¬®£ã ¯à®ç¨â âì ¯ ¯ªã',0
|
||||
else
|
||||
aDeleteCaption db 'Delete',0
|
||||
aConfirmDeleteText db 'Do you wish to delete ',0
|
||||
@ -4886,7 +5038,29 @@ aCopy db '[ Copy ]',0
|
||||
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 @@ panel2_dir rb 1024
|
||||
|
||||
;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 @@ max_x dd ?
|
||||
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 @@ saved_file_name:
|
||||
procinfo rb 1024
|
||||
lower_file_name = procinfo + 512
|
||||
|
||||
error_msg rb 128
|
||||
|
||||
prev_dir rb 1024
|
||||
|
||||
driveinfo rb 32+304
|
||||
tmpname rb 32
|
||||
|
||||
|
69
programs/fs/kfar/trunk/tools.inc
Normal file
69
programs/fs/kfar/trunk/tools.inc
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user