diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 3d39d9a31..0f9236c29 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -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: diff --git a/programs/menu/trunk/menu.asm b/programs/menu/trunk/menu.asm index c845a34bf..30092db3b 100644 --- a/programs/menu/trunk/menu.asm +++ b/programs/menu/trunk/menu.asm @@ -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 diff --git a/programs/menu/trunk/readme2.txt b/programs/menu/trunk/readme2.txt new file mode 100644 index 000000000..288b9b526 --- /dev/null +++ b/programs/menu/trunk/readme2.txt @@ -0,0 +1,6 @@ +Changes: +11.07.06 - Mario79, application used function 70. +Earlier changes were made: +Ivan Poddubny, Mario79 and Halyavin + +