1) changed version of a kernel - 0581
2) menu now uses the function 70
These changes will be in Kolibri 0581 (or beta2)

git-svn-id: svn://kolibrios.org@97 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2006-07-10 20:26:50 +00:00
parent 0727181583
commit 400f8f145d
3 changed files with 113 additions and 122 deletions

View File

@ -73,7 +73,7 @@ drawbar dd __sys_drawbar
putpixel dd __sys_putpixel
; } mike.dld
version db 'Kolibri OS version 0.5.3.1 ',13,10,13,10,0
version db 'Kolibri OS version 0.5.8.1 ',13,10,13,10,0
;dd endofcode-0x10000
;db 'Boot02'
@ -2324,7 +2324,7 @@ endg
iglobal
version_inf:
db 0,5,3,1 ; version 0.5.3.1
db 0,5,8,1 ; version 0.5.8.1
db UID_KOLIBRI
db 'Kolibri',0
version_end:

View File

@ -11,30 +11,33 @@
TXT_Y = (BTN_HEIGHT)/2-5
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x20000 ; memory for app
dd 0x20000-1 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x20000 ; memory for app
dd 0x20000-1 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
;******************************************************************************
;include "DEBUG.INC" ; debug macros
START: ; start of execution
START: ; start of execution
mov eax, 48 ; load system colors
mov eax, 48 ; load system colors
mov ebx, 3
mov ecx, sc
mov edx, sizeof.system_colors
int 0x40
mov eax, 58 ; load MENU.DAT
mov eax, 70 ; load MENU.DAT
mov ebx, fileinfo
int 0x40
test eax, eax ; error ?
test eax, eax ; error ?
jz @f
cmp eax,6
jnz close
test ebx, ebx ; length = 0 ?
@@:
test ebx, ebx ; length = 0 ?
jz close
mov ecx, ebx
mov edi, mem_end
@ -42,7 +45,7 @@ START: ; start of execution
mov al, '#'
cld
repne scasb
test ecx, ecx ; if not found
test ecx, ecx ; if not found
jz close
call get_number
test ebx, ebx
@ -51,7 +54,7 @@ START: ; start of execution
je search_end
.number:
shl ebx, 4
add ebx, menu_data ; pointer to process table
add ebx, menu_data ; pointer to process table
mov [ebx], edi
inc [processes]
jmp newsearch
@ -88,7 +91,7 @@ START: ; start of execution
mov eax, 14
int 0x40
sub ax, 20
mov [menu_data + y_end], ax
mov [menu_data + y_end], ax
mov [menu_data + x_start], 5
mov al, [menu_data + rows]
mov [menu_data + cur_sel], al ; clear selection
@ -96,48 +99,48 @@ START: ; start of execution
mov [buffer], 0
thread:
mov eax, [buffer] ; identifier
mov eax, [buffer] ; identifier
shl eax, 4
add eax, menu_data
mov edi, eax
mov eax, 40 ; set event mask
mov ebx, 100111b ; mouse + button + key + redraw
mov eax, 40 ; set event mask
mov ebx, 100111b ; mouse + button + key + redraw
int 0x40
call draw_window
still:
mov eax, 23 ; wait here for event
mov eax, 23 ; wait here for event
mov ebx, 5
int 0x40
test [close_now], 1 ; is close flag set?
test [close_now], 1 ; is close flag set?
jnz close
cmp eax, 1 ; redraw request ?
je red
cmp eax, 2 ; key pressed ?
je key
cmp eax, 3 ; button in buffer ?
je button
cmp eax, 6 ; mouse event ?
je mouse
cmp eax, 1 ; redraw request ?
je red
cmp eax, 2 ; key pressed ?
je key
cmp eax, 3 ; button in buffer ?
je button
cmp eax, 6 ; mouse event ?
je mouse
cmp edi, menu_data
je still ; if main process-ignored
je still ; if main process-ignored
movzx ebx, [edi + parent] ; parent id
shl ebx, 4
add ebx, menu_data ; ebx = base of parent info
call backconvert ; get my id in al
cmp al, [ebx + child] ; if I'm not child of my parent, I shall die :)
add ebx, menu_data ; ebx = base of parent info
call backconvert ; get my id in al
cmp al, [ebx + child] ; if I'm not child of my parent, I shall die :)
jne close
jmp still
red: ; redraw
red: ; redraw
call draw_window
jmp still
@ -146,9 +149,9 @@ still:
; mov eax, 2
int 0x40
mov al, [edi + rows] ; number of buttons
mov al, [edi + rows] ; number of buttons
cmp ah, 178 ; KEY_UP
cmp ah, 178 ; KEY_UP
jne .noup
mov ah, [edi+cur_sel]
@ -160,7 +163,7 @@ still:
.noup:
cmp ah, 177 ; KEY_DOWN
cmp ah, 177 ; KEY_DOWN
jne .nodn
mov ah, [edi + cur_sel]
@ -172,20 +175,20 @@ still:
jmp redrawbut
.nodn:
cmp ah, 13 ; ENTER
cmp ah, 13 ; ENTER
jne .noenter
mov ah, [edi + cur_sel]
jmp button1
.noenter:
cmp ah, 27 ; ESC
cmp ah, 27 ; ESC
jne still
jmp close
; include "DEBUG.INC"
button: ; BUTTON HANDLER
mov eax, 17 ; get id
button: ; BUTTON HANDLER
mov eax, 17 ; get id
int 0x40
button1:
@ -215,44 +218,29 @@ still:
mov al, '/'
cld
repne scasb
test ecx, ecx ; if '/' not found
je searchexit
test ecx, ecx ; if '/' not found
je searchexit
cmp [edi], byte '@' ; check for submenu
je runthread
je runthread
dec edi
push edi ; pointer to start of filename
push edi ; pointer to start of filename
call searchstartstring ; search for next string
sub edi, 2 ; to last byte of string
sub edi, 2 ; to last byte of string
mov ecx, edi
pop esi
sub ecx, esi
inc ecx ; length of filename
inc ecx ; length of filename
mov edi, fileinfo_start.name
rep movsb ; copy string
mov byte [edi], 0 ; store terminator
; mov eax,fileinfo_start.name
; cmp eax,'/rd/'
; jne run_hd
; mov ebx,fileinfo_start.name+6
; mov eax,19
; xor ecx,ecx
; jmp run_for_all
;run_hd:
mov eax, 58 ; start program
rep movsb ; copy string
mov byte [edi], 0 ; store terminator
mov eax, 70 ; start program
mov ebx, fileinfo_start
;run_for_all:
int 0x40
mcall 5,100
; mov eax,5
; mov ebx,100
; int 0x40
or [close_now], 1 ; set close flag
; mcall 5,100
or [close_now], 1 ; set close flag
pop edi
mov [mousemask], 0
jmp close
@ -266,38 +254,38 @@ still:
inc edi
push eax
call get_number ; get number of this process
call get_number ; get number of this process
pop eax
test ebx, ebx ; returned zero - main menu or not number
jz searchexit
test ebx, ebx ; returned zero - main menu or not number
jz searchexit
mov al, bl
mov ebx, [processes]
dec bl
cmp al, bl
ja searchexit ; such process doesnt exist
ja searchexit ; such process doesnt exist
cmp al, [esi + child]
je searchexit ; such process already exists
je searchexit ; such process already exists
mov [esi + child], al ; this is my child
mov cx, [esi + x_start]
add cx, 141 ; new x_start in cx
add cx, 141 ; new x_start in cx
movzx edx, al
shl edx, 4
add edx, menu_data ; edx points to child's base address
mov [edx + x_start], cx ; xstart for new thread
mov cx, [esi + y_end] ; y_end in cx
mov bl, [esi + rows] ; number of buttons in bl
sub bl, ah ; number of btn from bottom
sub bl, ah ; number of btn from bottom
movzx eax, al
mov [buffer], eax ; thread id in buffer
mov [buffer], eax ; thread id in buffer
movzx ebx, bl
push edx
mov eax, BTN_HEIGHT
mul ebx
sub cx, ax ; new y_end for new thread
sub cx, ax ; new y_end for new thread
pop edx
mov [edx + y_end], cx ; store y_end
mov edi, esi
@ -310,7 +298,7 @@ still:
cmp [thread_stack], 0x1e000
jne thread_stack_not_full
mov [thread_stack], 0xc000
mov [thread_stack], 0xE000
thread_stack_not_full:
add [thread_stack], 0x2000 ; start new thread
@ -323,30 +311,30 @@ thread_stack_not_full:
jmp searchexit
mouse: ; MOUSE EVENT HANDLER
mouse: ; MOUSE EVENT HANDLER
mov eax, 37
mov ebx, 2
int 0x40
test eax, eax ; check buttons state
test eax, eax ; check buttons state
jnz click
mov eax, 37
mov ebx, 1
int 0x40
ror eax, 16 ; eax = [ Y | X ] relative to window
cmp ax, 140 ; pointer in window?
ja noinwindow
ror eax, 16 ; eax = [ Y | X ] relative to window
cmp ax, 140 ; pointer in window?
ja noinwindow
;  in window 
shr eax, 16 ; eax = [ 0 | Y ]
shr eax, 16 ; eax = [ 0 | Y ]
xor edx, edx
mov ebx, BTN_HEIGHT
div ebx
inc eax ; number of "button" in eax
inc eax ; number of "button" in eax
movzx ebx, [edi + rows] ; total strings in ebx
cmp eax, ebx
ja noinwindow
ja noinwindow
cmp [edi + cur_sel], al
je noredrawbut
je noredrawbut
mov bl, [edi + cur_sel]
;;;;;;
@ -368,17 +356,17 @@ thread_stack_not_full:
jmp still
click:
cmp [mousemask], 0 ; not in a window (i.e. menu)
je close
je close
jmp still
close:
or eax, -1 ; close this thread
mov [edi + child], al ; my child is not mine
or eax, -1 ; close this thread
mov [edi + child], al ; my child is not mine
int 0x40
backconvert: ; convert from pointer to process id
backconvert: ; convert from pointer to process id
mov eax, edi
sub eax, menu_data
shr eax, 4
@ -399,9 +387,9 @@ thread_stack_not_full:
mov al, [edi]
inc edi
cmp al, '0'
jb .finish
jb .finish
cmp al, '9'
ja .finish
ja .finish
sub al, '0'
imul ebx, 10
add ebx, eax
@ -419,23 +407,23 @@ thread_stack_not_full:
draw_window:
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 1 ; 1, start of draw
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 1 ; 1, start of draw
int 0x40
movzx ebx, [edi + rows]
imul eax, ebx, BTN_HEIGHT ; eax = height of window
imul eax, ebx, BTN_HEIGHT ; eax = height of window
movzx ecx, [edi + y_end]
sub ecx, eax ; ecx = Y_START
sub ecx, eax ; ecx = Y_START
shl ecx, 16
add ecx, eax ; ecx = [ Y_START | Y_SIZE ]
add ecx, eax ; ecx = [ Y_START | Y_SIZE ]
dec ecx
movzx ebx, [edi + x_start]
shl ebx, 16
mov bx, 140 ; ebx = [ X_START | X_SIZE ]
xor eax, eax ; function 0 : define and draw window
mov edx, 0x01000000 ; color of work area RRGGBB,8->color gl
mov esi, edx ; unmovable window
mov bx, 140 ; ebx = [ X_START | X_SIZE ]
xor eax, eax ; function 0 : define and draw window
mov edx, 0x01000000 ; color of work area RRGGBB,8->color gl
mov esi, edx ; unmovable window
int 0x40
call draw_all_buttons
@ -453,7 +441,7 @@ draw_window:
call draw_one_button
inc edx
cmp dl, [edi + rows]
jb .new_button
jb .new_button
ret
@ -486,7 +474,7 @@ draw_window:
jne .nohighlight
add esi, 0x202020
.nohighlight:
or edx, 0x20000000
or edx, 0x20000000
int 0x40
movzx edx, dl
@ -499,7 +487,7 @@ draw_window:
mov edx, [edi + pointer]
.findline:
cmp byte [edx], 13
je .linefound
je .linefound
inc edx
jmp .findline
.linefound:
@ -530,24 +518,24 @@ draw_window:
;*** DATA AREA ****************************************************************
thread_stack dd 0xc000
thread_stack dd 0xE000
processes dd 0
fileinfo:
.mode dd 0 ; 0=READ
.start_block dd 0x0 ; 512 block to read 0+
.size dd (0x10000-mem_end)/512 ;0x80; blocks to read (0x10000 bytes max)
.return dd mem_end ; return data pointer
.work dd workarea ; work area for os - 16384 bytes
.subfunction dd 0 ; 0=READ
.start dd 0 ; start byte
.size_high dd 0 ; rezerved
.size dd 0x10000-mem_end ; blocks to read
.return dd mem_end ; return data pointer
.name:
db '/RD/1/MENU.DAT',0 ; ASCIIZ dir & filename
fileinfo_start:
.mode dd 16 ; 16=START APPLICATION
.start_block dd 0x0 ; nop
.size dd 0x0 ; nop
.return dd 0x0 ; nop
.work dd workarea ; work area for os - 16384 bytes
.subfunction dd 7 ; 7=START APPLICATION
.flags dd 0 ; flags
.params dd 0x0 ; nop
.rezerved dd 0x0 ; nop
.rezerved_1 dd 0x0 ; nop
.name:
times 50 db ' '
@ -555,7 +543,7 @@ I_END:
close_now dd ? ; close all processes immediately
end_pointer dd ?
buffer dd ?
buffer dd ?
mousemask dd ? ; mask for mouse pointer location
sc system_colors
@ -563,12 +551,9 @@ sc system_colors
menu_data:
rb 0x4000 ;x10000
workarea:
rb 0x4000 ;0x10000
virtual at 0 ; PROCESSES TABLE (located at menu_data)
pointer dd ? ; +0 pointer in file
rows db ? ; +4 numer of strings
rows db ? ; +4 numer of strings
x_start dw ? ; +5 x start
y_end dw ? ; +7 y end
child db ? ; +9 id of child menu

View File

@ -0,0 +1,6 @@
Changes:
11.07.06 - Mario79, application used function 70.
Earlier changes were made:
Ivan Poddubny, Mario79 and Halyavin