/kernel/branches/Kolibri-acpi/core/clipboard.inc |
---|
0,0 → 1,148 |
;------------------------------------------------------------------------------ |
align 4 |
sys_clipboard: |
xor eax, eax |
dec eax |
; check availability of main list |
cmp [clipboard_main_list], eax |
je .exit_1 ; main list area not found |
test ebx, ebx ; 0 - Get the number of slots in the clipboard |
jnz .1 |
; get the number of slots |
mov eax, [clipboard_slots] |
jmp .exit_1 |
;------------------------------------------------------------------------------ |
align 4 |
.1: |
dec ebx ; 1 - Read the data from the clipboard |
jnz .2 |
; verify the existence of slot |
cmp ecx, [clipboard_slots] |
jae .exit_2 |
; get a pointer to the data of slot |
shl ecx, 2 |
add ecx, [clipboard_main_list] |
mov esi, [ecx] |
mov ecx, [esi] |
; allocate memory for application for copy the data of slots |
push ecx |
stdcall user_alloc, ecx |
pop ecx |
; copying data of slots |
mov edi, eax |
cld |
rep movsb |
jmp .exit_1 |
;------------------------------------------------------------------------------ |
align 4 |
.2: |
dec ebx ; 2 - Write the data to the clipboard |
jnz .3 |
; check the lock |
mov ebx, clipboard_write_lock |
xor eax, eax |
cmp [ebx], eax |
jne .exit_2 |
; lock last slot |
inc eax |
mov [ebx], eax |
; check the overflow pointer of slots |
cmp [clipboard_slots], 1024 |
jae .exit_3 |
; get memory for new slot |
push ebx ecx edx |
stdcall kernel_alloc, ecx |
pop edx ecx ebx |
test eax, eax |
jz .exit_3 |
; create a new slot |
mov edi, eax |
mov eax, [clipboard_slots] |
shl eax, 2 |
add eax, [clipboard_main_list] |
mov [eax], edi |
; copy the data into the slot |
mov esi, edx |
mov eax, ecx |
cld |
stosd ; store size of slot |
sub ecx, 4 |
add esi, 4 |
rep movsb ; store slot data |
; increase the counter of slots |
inc [clipboard_slots] |
; unlock last slot |
xor eax, eax |
mov [ebx], eax |
jmp .exit_1 |
;------------------------------------------------------------------------------ |
align 4 |
.3: |
dec ebx ; 3 - Delete the last slot in the clipboard |
jnz .4 |
; check the availability of slots |
mov eax, [clipboard_slots] |
test eax, eax |
jz .exit_2 |
; check the lock |
mov ebx, clipboard_write_lock |
xor eax, eax |
cmp [ebx], eax |
jne .exit_2 |
; lock last slot |
inc eax |
mov [ebx], eax |
; decrease the counter of slots |
mov eax, clipboard_slots |
dec dword [eax] |
; free of kernel memory allocated for the slot |
mov eax, [eax] |
shl eax, 2 |
add eax, [clipboard_main_list] |
mov eax, [eax] |
push ebx |
stdcall kernel_free, eax |
pop ebx |
; unlock last slot |
xor eax, eax |
mov [ebx], eax |
jmp .exit_1 |
;------------------------------------------------------------------------------ |
align 4 |
.4: |
dec ebx ; 4 - Emergency discharge of clipboard |
jnz .exit |
; check the lock |
mov ebx, clipboard_write_lock |
xor eax, eax |
cmp [ebx], eax |
je .exit_2 |
; there should be a procedure for checking the integrity of the slots |
; and I will do so in the future |
; unlock last slot |
mov [ebx], eax |
jmp .exit |
;------------------------------------------------------------------------------ |
align 4 |
.exit_3: |
; unlock last slot |
xor eax, eax |
mov [ebx], eax |
.exit_2: |
xor eax, eax |
inc eax ; error |
.exit_1: |
mov [esp + 32], eax |
.exit: |
ret |
;------------------------------------------------------------------------------ |
uglobal |
align 4 |
clipboard_slots dd ? |
clipboard_main_list dd ? |
clipboard_write_lock dd ? |
endg |
;------------------------------------------------------------------------------ |
/kernel/branches/Kolibri-acpi/core/conf_lib-sp.inc |
---|
1,11 → 1,11 |
; Éste archivo debe ser editado con codificación CP866 |
ugui_mouse_speed:cp850 'velocidad del ratón',0 |
ugui_mouse_delay:cp850 'demora del ratón',0 |
ugui_mouse_speed cp850 'velocidad del ratón',0 |
ugui_mouse_delay cp850 'demora del ratón',0 |
udev:cp850 'disp',0 |
unet:cp850 'red',0 |
unet_active:cp850 'activa',0 |
unet_addr:cp850 'direc',0 |
unet_mask:cp850 'másc',0 |
unet_gate:cp850 'puer',0 |
udev cp850 'disp',0 |
unet cp850 'red',0 |
unet_active cp850 'activa',0 |
unet_addr cp850 'direc',0 |
unet_mask cp850 'másc',0 |
unet_gate cp850 'puer',0 |
/kernel/branches/Kolibri-acpi/core/dll.inc |
---|
458,7 → 458,6 |
push edi |
push ebx |
lea eax, [attr] |
stdcall get_fileinfo, [file_name], eax ;find file and get info |
test eax, eax |
484,11 → 483,26 |
mov ebx, [eax+4] ;get real size of file |
mov [file_size], ebx |
stdcall user_alloc, ebx ;and allocate memory from user heap |
stdcall user_alloc, ebx ;and allocate space from user heap |
mov [um_file], eax |
test eax, eax |
jz .err_2 |
mov edx, [file_size] ;preallocate page memory |
shr eax, 10 |
lea edi, [page_tabs+eax] |
add edx, 4095 |
shr edx, 12 |
@@: |
call alloc_page |
test eax, eax |
jz .err_3 |
or eax, PG_UW |
stosd |
dec edx |
jnz @B |
pushad |
mov ecx, unpack_mutex |
call mutex_lock |
501,8 → 515,22 |
stdcall kernel_free, [km_file] ;we don't need packed file anymore |
.exit: |
mov edi, [um_file] |
mov esi, [um_file] |
mov eax, [file_size] |
mov edx, eax |
add edi, eax ;cleanup remain space |
mov ecx, 4096 ;from file end |
and eax, 4095 |
jz @f |
sub ecx, eax |
xor eax, eax |
cld |
rep stosb |
@@: |
mov eax, [um_file] |
mov edx, [file_size] |
pop ebx |
pop edi |
509,7 → 537,6 |
pop esi |
ret |
.raw_file: ; sometimes we load unpacked file |
stdcall user_alloc, ebx ; allocate space from user heap |
mov [um_file], eax |
533,13 → 560,14 |
@@: |
lodsd |
and eax, 0xFFFFF000 |
or eax, PG_USER |
or eax, PG_UW |
stosd |
loop @B |
stdcall free_kernel_space, [km_file] ; release allocated kernel space |
jmp .exit ; physical pages still in use |
.err_3: |
stdcall user_free, [um_file] |
.err_2: |
stdcall kernel_free, [km_file] |
.err_1: |
/kernel/branches/Kolibri-acpi/core/exports.inc |
---|
82,6 → 82,8 |
delete_keyboard, 'DelKeyboard', \ |
get_cpu_freq, 'GetCpuFreq', \ |
\ |
new_sys_threads, 'CreateThread', \ ; ebx, ecx, edx |
\ |
srv_handler, 'ServiceHandler', \ |
fpu_save, 'FpuSave', \ |
fpu_restore, 'FpuRestore', \ |
/kernel/branches/Kolibri-acpi/core/sys32-sp.inc |
---|
1,4 → 1,4 |
; Éste archivo debe ser editado con codificación CP866 |
msg_sel_ker: cp850 "núcleo", 0 |
msg_sel_app: cp850 "aplicación", 0 |
msg_sel_ker cp850 "núcleo", 0 |
msg_sel_app cp850 "aplicación", 0 |
/kernel/branches/Kolibri-acpi/core/sys32.inc |
---|
247,7 → 247,84 |
DEBUGF 1, "K : EDX : %x ESI : %x EDI : %x\n", [reg_edx+4], [reg_esi+4], [reg_edi+4] |
DEBUGF 1, "K : EBP : %x EIP : %x ESP : %x\n", [reg_ebp+4], [reg_eip+4], ebx |
DEBUGF 1, "K : Flags : %x CS : %x (%s)\n", [reg_eflags+4], eax, edi |
DEBUGF 1, "K : Stack dump:\n" |
push eax ebx ecx edx |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, "K : [ESP+00]: %x",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, " [ESP+04]: %x",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, " [ESP+08]: %x\n",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, "K : [ESP+12]: %x",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, " [ESP+16]: %x",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, " [ESP+20]: %x\n",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, "K : [ESP+24]: %x",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, " [ESP+28]: %x",[ebx] |
add ebx, 4 |
call .check_ESP |
test eax, eax |
jnz .error_ESP |
DEBUGF 1, " [ESP+32]: %x\n",[ebx] |
pop edx ecx ebx eax |
ret |
.error_ESP: |
pop edx ecx ebx eax |
DEBUGF 1, "\n" |
DEBUGF 1, "K : Unexpected end of the stack\n" |
ret |
;-------------------------------------- |
.check_ESP: |
push ebx |
shr ebx, 12 |
mov ecx, ebx |
shr ecx, 10 |
mov edx, [master_tab+ecx*4] |
test edx, PG_MAP |
jz .fail ;page table is not created |
;incorrect address in the program |
mov eax, [page_tabs+ebx*4] |
test eax, 2 |
jz .fail ;address not reserved for use. error |
pop ebx |
xor eax, eax |
ret |
.fail: |
pop ebx |
xor eax, eax |
dec eax |
ret |
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
restore reg_ss |
/kernel/branches/Kolibri-acpi/core/syscall.inc |
---|
184,7 → 184,7 |
dd syscall_threads ; 51-Threads |
dd undefined_syscall ; 52- deprecated Stack driver status |
dd undefined_syscall ; 53- deprecated Socket interface |
dd undefined_syscall ; 54-reserved |
dd sys_clipboard ; 54-Custom clipboard |
dd sound_interface ; 55-Sound interface |
dd undefined_syscall ; 56-reserved |
dd sys_pcibios ; 57-PCI BIOS32 |
/kernel/branches/Kolibri-acpi/core/taskman.inc |
---|
924,10 → 924,17 |
ret |
endp |
;ebx = 1 - kernel thread |
;ecx=thread entry point |
;edx=thread stack pointer |
;creation flags 0x01 - debugged |
; 0x02 - kernel |
align 4 |
proc new_sys_threads |
locals |
slot dd ? |
flags dd ? |
app_cmdline dd ? ;0x00 |
app_path dd ? ;0x04 |
app_eip dd ? ;0x08 |
935,8 → 942,8 |
app_mem dd ? ;0x10 |
endl |
cmp ebx, 1 |
jne .failed ;other subfunctions |
shl ebx, 1 |
mov [flags], ebx |
xor eax, eax |
mov [app_eip], ecx |
943,8 → 950,7 |
mov [app_cmdline], eax |
mov [app_esp], edx |
mov [app_path], eax |
;mov esi,new_process_loading |
;call sys_msg_board_str |
call lock_application_table |
call get_new_process_place |
998,10 → 1004,8 |
lea eax, [app_cmdline] |
stdcall set_app_params , [slot], eax, dword 0, \ |
dword 0,dword 0 |
dword 0, [flags] |
;mov esi,new_process_running |
;call sys_msg_board_str ;output information about succefull startup |
mov eax, [process_number] ;set result |
call unlock_application_table |
ret |
1207,14 → 1211,13 |
mov [ebx+REG_EIP], eax;app_entry |
mov [ebx+REG_CS], dword app_code |
mov ecx, USER_PRIORITY |
mov eax, [CURRENT_TASK] |
shl eax, 8 ; created by kernel? |
cmp [SLOT_BASE+eax+APPDATA.dir_table], sys_pgdir - OS_BASE |
jnz @f |
cmp [app_path], 0 ; it is a thread? |
jnz @f |
test byte [flags], 2 |
jz @F |
mov [ebx+REG_CS], dword os_code ; kernel thread |
mov ecx, MAX_PRIORITY |
@@: |
mov [ebx+REG_EFLAGS], dword EFL_IOPL1+EFL_IF |
1238,8 → 1241,6 |
mov [CURRENT_TASK+ebx+TASKDATA.state], dl |
lea edx, [SLOT_BASE+ebx*8] |
call scheduler_add_thread |
;mov esi,new_process_running |
;call sys_msg_board_str ;output information about succefull startup |
ret |
endp |