diff --git a/programs/system/cpu/trunk/cpu.asm b/programs/system/cpu/trunk/cpu.asm index f05f775796..40df734d6f 100644 --- a/programs/system/cpu/trunk/cpu.asm +++ b/programs/system/cpu/trunk/cpu.asm @@ -2,758 +2,1091 @@ ; CPU - process manager ; ;-----------------------; -format binary as "" + format binary as "" - use32 - org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd START ; start of code - dd IM_END ; size of image - dd U_END ; memory for app - dd stack_area ; esp - dd 0x0 ; boot parameters - dd cur_dir_path ; path -;------------------------------------------------------------------------------ -include 'lang.inc' -include '../../../macros.inc' -include '../../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../../KOSfuncs.inc' -include '../../../load_lib.mac' -;------------------------------------------------------------------------------ -display_processes=24 ;32 ; number of processes to show -window_x_size=524 -window_y_size=430 -;------------------------------------------------------------------------------ -@use_library ;use load lib macros -;------------------------------------------------------------------------------ -START: ; start of execution - mcall SF_SYS_MISC,SSF_HEAP_INIT -sys_load_library library_name, library_path, system_path, myimport - inc eax - jz close -;------------------------------------------------------------------------------ - mcall SF_SET_EVENTS_MASK,0x80000027 ;set event -;------------------------------------------------------------------------------ + use32 + org 0x0 + + db "MENUET01" ; 8 byte id + dd 0x01 ; header version + dd START ; start of code + dd IM_END ; size of image + dd U_END ; memory for app + dd stack_area ; esp + dd 0x0 ; boot parameters + dd cur_dir_path ; path +;------------------------------------------------------------------------------- +include "lang.inc" +include "../../../macros.inc" +include "../../../develop/libraries/box_lib/trunk/box_lib.mac" +include "../../../KOSfuncs.inc" +include "../../../load_lib.mac" +;------------------------------------------------------------------------------- +DISPLAY_PROCESSES = 20 ;number of processes to show +;------------------------------------------------------------------------------- +WINDOW.WIDTH = PROCESS_TABLE.WIDTH + 10*2 +WINDOW.HEIGHT = WORK_AREA.HEIGHT + 30 +WORK_AREA.HEIGHT = CHECKBOX.Y + BUTTON.HEIGHT + 10 +PROCESS_TABLE: + .X = 10 + .Y = 10 + .WIDTH = 640 + .HEIGHT = DISPLAY_PROCESSES * BUTTON.HEIGHT +UNDERTABLE: + .X = PROCESS_TABLE.X + .Y = PROCESS_TABLE.Y + PROCESS_TABLE.HEIGHT + 20 +BUTTON: + .HEIGHT = 16 + 4 +EDITBOX: + .X = CHECKBOX.X + 100 + .Y = UNDERTABLE.Y + BUTTON.HEIGHT + 25 + .WIDTH = 465 + .HEIGHT = 15 + +CHECKBOX: + .X = PROCESS_TABLE.X + .Y = UNDERTABLE.Y + BUTTON.HEIGHT + 25 +;------------------------------------------------------------------------------- +@use_library ;use load lib macros +;------------------------------------------------------------------------------- + struc utf8z string +{ + . db string, 0 + .size = $ - . - 1 +} + +;------------------------------------------------------------------------------- +START: ; start of execution + mcall SF_SYS_MISC,SSF_HEAP_INIT + sys_load_library library_name, library_path, system_path, myimport + inc eax + jz close +;------------------------------------------------------------------------------- + mcall SF_SET_EVENTS_MASK,0x80000027 ;set event +;------------------------------------------------------------------------------- ;set window size and position for 0 function ;to [winxpos] and [winypos] variables ;get screen size - mcall SF_GET_SCREEN_SIZE - mov ebx,eax -;calculate (x_screen-window_x_size)/2 - shr ebx,16+1 - sub ebx,window_x_size/2 - shl ebx,16 - mov bx,window_x_size + mcall SF_GET_SCREEN_SIZE + mov ebx,eax +;calculate (x_screen-WINDOW.WIDTH)/2 + shr ebx,16+1 + sub ebx,WINDOW.WIDTH/2 + shl ebx,16 + mov bx,WINDOW.WIDTH ;winxpos=xcoord*65536+xsize - mov [winxpos],ebx -;calculate (y_screen-window_y_size)/2 - and eax,0xffff - shr eax,1 - sub eax,window_y_size/2 - shl eax,16 - mov ax,window_y_size + mov [winxpos],ebx +;calculate (y_screen-WINDOW.HEIGHT)/2 + and eax,0xffff + shr eax,1 + sub eax,WINDOW.HEIGHT/2 + shl eax,16 + mov ax,WINDOW.HEIGHT ;winypos=ycoord*65536+ysize - mov [winypos],eax -;------------------------------------------------------------------------------ - init_checkboxes2 check1,check1_end - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,40 - edit_boxes_set_sys_color edit1,edit1_end,sc ;set color - ;check_boxes_set_sys_color2 check1,check1_end,sc ;set color -;------------------------------------------------------------------------------ + mov [winypos],eax +;------------------------------------------------------------------------------- + init_checkboxes2 check1,check1_end + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,40 + edit_boxes_set_sys_color edit1,edit1_end,sc ;set color + ;check_boxes_set_sys_color2 check1,check1_end,sc ;set color +;------------------------------------------------------------------------------- align 4 -;main loop when process name isn't edited. +;main loop when process name isn"t edited. red: - call draw_window ; redraw all window -;------------------------------------------------------------------------------ + call draw_window ; redraw all window +;------------------------------------------------------------------------------- align 4 still: - mcall SF_WAIT_EVENT_TIMEOUT,100 ; wait here for event 1 sec. + mcall SF_WAIT_EVENT_TIMEOUT,100 ; wait here for event 1 sec. test eax,eax jz still_end - dec eax ; redraw request ? - jz red + dec eax ; redraw request ? + jz red - dec eax ; key in buffer ? - jz key + dec eax ; key in buffer ? + jz key - dec eax ; button in buffer ? - jz button + dec eax ; button in buffer ? + jz button - push dword edit1 - call [edit_box_mouse] + push dword edit1 + call [edit_box_mouse] - push dword[check1.flags] + push dword[check1.flags] - push dword check1 - call [check_box_mouse] + push dword check1 + call [check_box_mouse] - pop eax + pop eax - cmp eax, dword[check1.flags] - jz still_end + cmp eax, dword[check1.flags] + jz still_end - push dword check1 - call [check_box_draw] -;-------------------------------------- + push dword check1 + call [check_box_draw] +;------------------------------------------------------------------------------- align 4 show_process_info_1: - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - add eax,100 - mov [time_counter],eax + mcall SF_SYSTEM_GET, SSF_TIME_COUNT + add eax, 100 + mov [time_counter],eax - call show_process_info ; draw new state of processes - jmp still -;------------------------------------------------------------------------------ + call show_process_info ; draw new state of processes + jmp still +;------------------------------------------------------------------------------- align 4 still_end: - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - cmp [time_counter],eax - ja still + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + cmp [time_counter],eax + ja still - add eax,100 - mov [time_counter],eax + add eax,100 + mov [time_counter],eax - call show_process_info ; draw new state of processes - jmp still -;------------------------------------------------------------------------------ + call show_process_info ; draw new state of processes + jmp still +;------------------------------------------------------------------------------- align 4 -key: ; key - mcall SF_GET_KEY +key: ; key + mcall SF_GET_KEY - cmp ah,184 ; PageUp - jz pgdn + cmp ah,184 ; PageUp + jz pgdn - cmp ah,183 - jz pgup ; PageDown + cmp ah,183 + jz pgup ; PageDown - cmp ah,27 - jz close ; Esc + cmp ah,27 + jz close ; Esc - push dword edit1 - call [edit_box_key] - ; Check ENTER with ed_focus edit_box - lea edi,[edit1] - test word ed_flags,ed_focus - jz still_end + push dword edit1 + call [edit_box_key] + ; Check ENTER with ed_focus edit_box + lea edi,[edit1] + test word ed_flags,ed_focus + jz still_end - sub ah,13 ; ENTER? - jz program_start ; RUN a program + sub ah,13 ; ENTER? + jz program_start ; RUN a program - jmp still -;------------------------------------------------------------------------------ + jmp still +;------------------------------------------------------------------------------- align 4 button: ; get button id - mcall SF_GET_BUTTON - mov bl, al ; save mouse button to bl - shr eax,8 + mcall SF_GET_BUTTON + mov bl, al ; save mouse button to bl + shr eax,8 ;id in [10,50] corresponds to terminate buttons. - cmp eax,10 - jb noterm + cmp eax,10 + jb noterm - cmp eax,50 - jg noterm + cmp eax,50 + jg noterm ;calculate button index - sub eax,11 + sub eax,11 ;calculate process slot - mov ecx,[tasklist+4*eax] + mov ecx,[tasklist+4*eax] ;ignore empty buttons - test ecx,ecx - jle still_end - test bl, bl ; check mouse button - jz .terminate - mov eax, ecx - mov edi, tinfo.params_buf + test ecx,ecx + jle still_end + test bl, bl ; check mouse button + jz .terminate + mov eax, ecx + mov edi, tinfo.params_buf ;; number in eax ;; buffer in edi ; int2str: - push 0 - mov ecx, 10 + push 0 + mov ecx, 10 .push: - xor edx, edx - div ecx - add edx, 48 - push edx - test eax, eax - jnz .push + xor edx, edx + div ecx + add edx, 48 + push edx + test eax, eax + jnz .push .pop: - pop eax - stosb - test eax, eax - jnz .pop + pop eax + stosb + test eax, eax + jnz .pop ; launch tinfo app - mov ebx, tinfo - mov eax, SF_FILE - int 64 - jmp show_process_info_1 + mov ebx, tinfo + mov eax, SF_FILE + int 64 + jmp show_process_info_1 .terminate: ;terminate application - mcall SF_SYSTEM,SSF_TERMINATE_THREAD - jmp show_process_info_1 -;-------------------------------------- + mcall SF_SYSTEM,SSF_TERMINATE_THREAD + jmp show_process_info_1 +;------------------------------------------------------------------------------- align 4 noterm: ;special buttons - dec eax - jz close + dec eax + jz close - sub eax,50 - jz pgdn ;51 + sub eax,50 + jz pgdn ;51 - dec eax - jz pgup ;52 + dec eax + jz pgup ;52 - dec eax - jz program_start ;53 + dec eax + jz reboot ;53 - dec eax - jz reboot ;54 + dec eax + jz program_start ;54 - jmp still_end + jmp still_end ;buttons handlers -;------------------------------------------------------------------------------ +;------------------------------------------------------------------------------- align 4 pgdn: - sub [list_start],display_processes - jge show_process_info_1 - mov [list_start],0 - jmp show_process_info_1 -;------------------------------------------------------------------------------ + sub [list_start],DISPLAY_PROCESSES + jge show_process_info_1 + mov [list_start],0 + jmp show_process_info_1 +;------------------------------------------------------------------------------- align 4 pgup: - mov eax,[list_add] ;maximal displayed process slot - mov [list_start],eax - jmp show_process_info_1 -;------------------------------------------------------------------------------ + mov eax,[list_add] ;maximal displayed process slot + mov [list_start],eax + jmp show_process_info_1 +;------------------------------------------------------------------------------- align 4 program_start: - mcall SF_FILE,file_start - jmp show_process_info_1 -;------------------------------------------------------------------------------ + mcall SF_FILE,file_start + jmp show_process_info_1 +;------------------------------------------------------------------------------- align 4 reboot: - mcall SF_FILE,sys_reboot + mcall SF_FILE,sys_reboot ;close program if we going to reboot -;------------------------------------------------------------------------------ +;------------------------------------------------------------------------------- align 4 close: - or eax,SF_TERMINATE_PROCESS ; close this program - mcall -;------------------------------------------------------------------------------ + or eax,SF_TERMINATE_PROCESS ; close this program + mcall +;------------------------------------------------------------------------------- align 4 draw_empty_slot: - cmp [draw_window_flag],1 - je @f - mov ecx,[curposy] - shl ecx,16 - mov cx,10 ; button height - mcall SF_DRAW_RECT,<111,393>,,[bar_bacground_color] + cmp [draw_window_flag],1 + je @f + mov ecx,[curposy] + shl ecx,16 + mov cx, BUTTON.HEIGHT + mcall SF_DRAW_RECT, <132, PROCESS_TABLE.WIDTH-131>, , [bar_bacground_color] @@: - ret -;------------------------------------------------------------------------------ + ret +;------------------------------------------------------------------------------- align 4 draw_next_process: ;input: -; edi - current slot -; [curposy] - y position +; edi - current slot +; [curposy] - y position ;output: -; edi - next slot (or -1 if no next slot) +; edi - next slot (or -1 if no next slot) ;registers corrupted! ;create terminate process button - mov ecx,[curposy] - shl ecx,16 - mov cx,13 ; button height - mov edx,[index] - add edx,11 - mov esi,0xccddee - test dword [index],1 - jz @f - mov esi,0xaabbcc + mov ecx,[curposy] + shl ecx,16 + mov cx, BUTTON.HEIGHT + mov edx,[index] + add edx,11 + mov esi,0xccddee + test dword [index],1 + jz @f + mov esi,0xaabbcc @@: - add edx,0x80000000 ; delete a button - mcall SF_DEFINE_BUTTON ; before create - sub edx,0x80000000 ; a new one below - mcall SF_DEFINE_BUTTON,<10,99> - mov [btn_bacground_color],esi + add edx,0x80000000 ; delete a button + mcall SF_DEFINE_BUTTON ; before create + sub edx,0x80000000 ; a new one below + mcall SF_DEFINE_BUTTON,<10,120> + mov [btn_bacground_color],esi ;draw background for proccess information - mov edx,0xddffdd - test dword [index],1 - jz @f - mov edx,0xffffff + mov edx,0xEFEFF5 + test dword [index],1 + jz @f + mov edx,0xffffff @@: - inc cx - cmp [draw_window_flag],0 - je @f - mcall SF_DRAW_RECT,<110,395> -@@: - mov [bar_bacground_color],edx -;nothing else should be done if there is no process for this button - cmp edi,-1 - jne .return_1 + inc cx - call draw_empty_slot - or edi,-1 - jmp .ret -;-------------------------------------- + mcall SF_DRAW_RECT, <131, PROCESS_TABLE.WIDTH-131> + + mov [bar_bacground_color],edx +;nothing else should be done if there is no process for this button + cmp edi,-1 + jne .return_1 + + call draw_empty_slot + or edi,-1 + jmp .ret +;------------------------------------------------------------------------------- align 4 .return_1: ;find process - inc edi + inc edi ;more comfortable register for next loop - mov ecx,edi + mov ecx,edi ;precacluate pointer to process buffer - mov ebx,process_info_buffer -;-------------------------------------- + mov ebx,process_info_buffer +;------------------------------------------------------------------------------- align 4 .find_loop: - cmp ecx,256 - jge .no_processes + cmp ecx,256 + jge .no_processes ;load process information in buffer - mcall SF_THREAD_INFO + mcall SF_THREAD_INFO ;if current slot greater than maximal slot, ;there is no more proccesses. - cmp ecx,eax - jg .no_processes + cmp ecx,eax + jg .no_processes ;if slot state is equal to 9, it is empty. - cmp [process_info_buffer+process_information.slot_state],9 - jnz .process_found + cmp [process_info_buffer+process_information.slot_state],9 + jnz .process_found - inc ecx - jmp .find_loop -;-------------------------------------- + inc ecx + jmp .find_loop +;------------------------------------------------------------------------------- align 4 .no_processes: - call draw_empty_slot - or edi,-1 - ret -;-------------------------------------- + call draw_empty_slot + or edi,-1 + ret +;------------------------------------------------------------------------------- align 4 .process_found: ;check on/off check box - push edi - lea edi,[check1] - test dword ch_flags,ch_flag_en - pop edi - jnz .no_filter + test dword [check1.flags], ch_flag_en + jnz .no_filter - cmp dword [process_info_buffer+10],'ICON' + cmp dword [process_info_buffer+10],"ICON" jnz @f - cmp dword [process_info_buffer+10+4],0 - jz .return_1 + cmp dword [process_info_buffer+10+4],0 + jz .return_1 @@: - cmp dword [process_info_buffer+10],'IDLE' + cmp dword [process_info_buffer+10],"IDLE" jnz @f - cmp dword [process_info_buffer+10+4],0 - jz .return_1 + cmp dword [process_info_buffer+10+4],0 + jz .return_1 @@: - cmp word [process_info_buffer+10],'OS' + cmp word [process_info_buffer+10],"OS" jnz @f - cmp dword [process_info_buffer+10+2],0 - jz .return_1 + cmp dword [process_info_buffer+10+2],0 + jz .return_1 @@: - cmp byte [process_info_buffer+10],'@' - jz .return_1 -;-------------------------------------- + cmp byte [process_info_buffer+10],"@" + jz .return_1 +;------------------------------------------------------------------------------- align 4 .no_filter: - mov edi,ecx - mov [list_add],ecx + mov edi,ecx + mov [list_add],ecx ;get processor cpeed ;for percent calculating - mcall SF_SYSTEM,SSF_GET_CPU_FREQUENCY - xor edx,edx - mov ebx,100 - div ebx + mcall SF_SYSTEM,SSF_GET_CPU_FREQUENCY + xor edx,edx + mov ebx,100 + div ebx ;eax = number of operation for 1% now ;calculate process cpu usage percent - mov ebx,eax - mov eax,[process_info_buffer+process_information.cpu_usage] -; cdq - xor edx,edx ; for CPU more 2 GHz - mike.dld - div ebx - mov [cpu_percent],eax + mov ebx,eax + mov eax,[process_info_buffer+process_information.cpu_usage] +; cdq + xor edx,edx ; for CPU more 2 GHz - mike.dld + div ebx + mov [cpu_percent],eax ;set text color to display process information -;0% : black -;1-80% : green +;0% : black +;1-80% : green ;81-100% : red - test eax,eax - jnz .no_black + test eax,eax + jnz .no_black - mov esi,eax - jmp .color_set -;-------------------------------------- + mov esi, 0x10000000 + jmp .color_set +;------------------------------------------------------------------------------- align 4 .no_black: - cmp eax,80 - ja .no_green + cmp eax,80 + ja .no_green - mov esi,0x107a30 - jmp .color_set -;-------------------------------------- + mov esi, 0x10107A30 + jmp .color_set +;------------------------------------------------------------------------------- align 4 .no_green: - mov esi,0xac0000 -;-------------------------------------- + mov esi,0x10AC0000 +;------------------------------------------------------------------------------- align 4 .color_set: ;show slot number -;ecx haven't changed since .process_found - push edi - mov edx,[curposy] - add edx,15*65536+3 - mcall SF_DRAW_NUMBER,<2,256> +;ecx haven"t changed since .process_found + push edi + mov eax, ecx + mov ebx, [curposy] + add ebx, 40 shl 16 + 3 + mov ecx, esi + xor edx, edx + call draw_ra_dec_number + push ecx ;show process name - mov ebx,[curposy] - add ebx,40*65536+3 - mov ecx,esi - mcall SF_DRAW_TEXT,,,process_info_buffer.process_name,11 -;show pid - mov edx,[curposy] - add edx,125*65536+3 - mov esi,ecx - or esi,0x40000000 - mcall SF_DRAW_NUMBER,<8,256>,[process_info_buffer.PID],,,[bar_bacground_color] + mov ebx,[curposy] + add ebx,50*65536+3 + mov ecx, esi + or ecx, 0x80000000 + mcall SF_DRAW_TEXT,,,process_info_buffer.process_name,11 + pop ecx +;show PTID + mov eax, [process_info_buffer.PID] + add ebx, 160 shl 16 + xor edx, edx + call draw_ra_dec_number ;show cpu usage - add edx,60*65536 - mcall ,,[process_info_buffer.cpu_usage] + mov eax, [process_info_buffer.cpu_usage] + add ebx, 100 shl 16 + call draw_ra_dec_number ;show cpu percent - add edx,60*65536 - mcall ,<3,0>,[cpu_percent] -;show memory start - obsolete - add edx,30*65536 - mcall ,<8,256>,[process_info_buffer.memory_start] + mov eax, [cpu_percent] + add ebx, 55 shl 16 + call draw_ra_dec_number ;show memory usage - mov ecx,[process_info_buffer.used_memory] - inc ecx - add edx,60*65536 - mcall -;show window stack and value - add edx,60*65536 - mcall ,,dword [process_info_buffer.window_stack_position] -;show window xy size - mov ecx,[process_info_buffer.box.left] - shl ecx,16 - add ecx,[process_info_buffer.box.top] - add edx,60*65536 - mcall - pop edi -;-------------------------------------- + mov eax, [process_info_buffer.used_memory] + add ebx, 60 shl 16 + call draw_ra_data_size +;show window stack position + movzx eax, word [process_info_buffer.window_stack_position] + add ebx, 70 shl 16 + call draw_ra_dec_number +;show window x size + movzx eax, word [process_info_buffer.box.left] + add ebx, 70 shl 16 + call draw_ra_dec_number +;show window y size + movzx eax, word [process_info_buffer.box.top] + add ebx, 70 shl 16 + call draw_ra_dec_number + pop edi +;------------------------------------------------------------------------------- align 4 .ret: ;build index->slot map for terminating processes. - mov eax,[index] - mov [tasklist+4*eax],edi - ret -;------------------------------------------------------------------------------ + mov eax,[index] + mov [tasklist+4*eax],edi + ret +;------------------------------------------------------------------------------- align 4 f11: ;full update - push edi - call draw_window - pop edi -;------------------------------------------------------------------------------ -; ********************************************* -; ******* WINDOW DEFINITIONS AND DRAW ******** -; ********************************************* + push edi + call draw_window + pop edi +;------------------------------------------------------------------------------- +; ********************************************* +; ******* WINDOW DEFINITIONS AND DRAW ******** +; ********************************************* align 4 draw_window: - mcall SF_REDRAW, SSF_BEGIN_DRAW + mcall SF_REDRAW, SSF_BEGIN_DRAW ; DRAW WINDOW - xor eax,eax ; function 0 : define and draw window - xor esi,esi - mcall ,[winxpos],[winypos],0x74ffffff,,title ;0x34ddffdd + xor eax,eax ; function 0 : define and draw window + xor esi,esi + mcall ,[winxpos],[winypos], 0x34FFFFFF,, strings.tmp_window_caption ;0x34ddffdd - mcall SF_THREAD_INFO,process_info_buffer,-1 + mcall SF_THREAD_INFO,process_info_buffer,-1 - mov eax,[ebx+70] - mov [window_status],eax - test [window_status],100b ; window is rolled up - jnz .exit + mov eax,[ebx+70] + mov [window_status],eax + test [window_status],100b ; window is rolled up + jnz .exit - test [window_status],10b ; window is minimized to panel - jnz .exit + test [window_status],10b ; window is minimized to panel + jnz .exit + + mov eax, strings.process_name + mov ebx, 130 shl 16 + 5 + xor ecx, ecx + call draw_ra_text + + mov eax, strings.ptid + add ebx, 80 shl 16 + call draw_ra_text + + mov eax, strings.cpu_usage_cycles + add ebx, 100 shl 16 + call draw_ra_text + + mov eax, strings.cpu_usage_percent + add ebx, 55 shl 16 + call draw_ra_text + + mov eax, strings.memory_usage + add ebx, 60 shl 16 + call draw_ra_text + + mov eax, strings.window_stack_pos + add ebx, 70 shl 16 + call draw_ra_text + + mov eax, strings.window_position.x + add ebx, 70 shl 16 + call draw_ra_text + + mov eax, strings.window_position.y + add ebx, 70 shl 16 + call draw_ra_text - mov eax,[ebx+62] - inc eax - mov [client_area_x_size],eax - mov eax,[ebx+66] - inc eax - mov [client_area_y_size],eax + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + add eax,100 + mov [time_counter],eax - mov ebx,[client_area_x_size] - mcall SF_DRAW_RECT,,<0,20>,0xffffff -; function 4 : write text to window - xor ecx,ecx - mcall SF_DRAW_TEXT,<17,8>,,text,text_len + mov [draw_window_flag],1 + call show_process_info + mov [draw_window_flag],0 - mcall SF_DRAW_RECT,<0,10>,<20,336>,0xffffff + push dword edit1 + call [edit_box_draw] - mov ebx,[client_area_x_size] - sub ebx,10+100+395 - add ebx,(10+100+395) shl 16 - mcall + push dword check1 + call [check_box_draw] - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - add eax,100 - mov [time_counter],eax - - mov [draw_window_flag],1 - call show_process_info - mov [draw_window_flag],0 - - mov ebx,[client_area_x_size] - mov ecx,[client_area_y_size] - sub ecx,20+336 - add ecx,(20+336) shl 16 - mcall SF_DRAW_RECT,,,0xffffff - - push dword edit1 - call [edit_box_draw] - - push dword check1 - call [check_box_draw] - -; previous page button - mcall SF_DEFINE_BUTTON,<25,96>,<361,14>,51,0xccddee ;0xaabbcc -; next page button 52 - inc edx - mcall ,<125,96> -; ">" (text enter) button - add ecx,20 shl 16 -; run button 53 - inc edx - mcall ,<456,50> -; reboot button - sub ebx,120*65536 - add ebx,60 - sub ecx,20 shl 16 - inc edx - mcall -;"PREV PAGE", "NEXT PAGE" and "REBOOT" labels - xor ecx,ecx - mcall SF_DRAW_TEXT,<45,365>,,tbts,tbte-tbts -;"RUN" labels - mcall ,<464,385>,,tbts_3,tbte_2-tbts_3 -;print application name in text box -;-------------------------------------- +;previous page button, ID = 51: + mov eax, strings.previous_page + mov ebx, UNDERTABLE.X shl 16 + UNDERTABLE.Y + mov ecx, 51 + mov edx, 0xCCDDEE + xor esi, esi + call draw_button_with_caption +;next page button, ID = 52: + mov eax, strings.next_page + add ebx, 10 shl 16 + inc ecx + call draw_button_with_caption +;reboot button, ID = 53: + mov eax, strings.reboot + add ebx, 345 shl 16 + inc ecx + call draw_button_with_caption +;run button, ID = 54 + mov eax, strings.run + mov ebx, (EDITBOX.X + EDITBOX.WIDTH + 10) shl 16 + (EDITBOX.Y + EDITBOX.HEIGHT/2 - BUTTON.HEIGHT/2) + inc ecx + call draw_button_with_caption +;------------------------------------------------------------------------------- align 4 .exit: - mcall SF_REDRAW, SSF_END_DRAW - ret -;------------------------------------------------------------------------------ + mcall SF_REDRAW, SSF_END_DRAW + ret +;------------------------------------------------------------------------------- align 4 show_process_info: - test [window_status],100b ; window is rolled up - jnz .exit + test [window_status], 100b ; window is rolled up + jnz .exit - test [window_status],10b ; window is minimized to panel - jnz .exit + test [window_status], 10b ; window is minimized to panel + jnz .exit - mov ecx,display_processes - mov edi,tasklist - xor eax,eax - cld - rep stosd + mov ecx,DISPLAY_PROCESSES + mov edi,tasklist + xor eax,eax + cld + rep stosd - mov edi,[list_start] - mov [list_add],edi - mov dword [index],0 - mov dword [curposy],20 -;-------------------------------------- + mov edi,[list_start] + mov [list_add],edi + mov dword [index],0 + mov dword [curposy],20 +;------------------------------------------------------------------------------- align 4 .loop_draw: - call draw_next_process - inc dword [index] - add dword [curposy],14 - cmp [index],display_processes - jl .loop_draw -;-------------------------------------- + call draw_next_process + inc dword [index] + add dword [curposy],16+4 + cmp [index],DISPLAY_PROCESSES + jl .loop_draw +;------------------------------------------------------------------------------- align 4 .exit: - ret -;------------------------------------------------------------------------------ -; DATA AREA -;------------------------------------------------------------------------------ -system_path db '/sys/lib/' -library_name db 'box_lib.obj',0 + ret + +;------------------------------------------------------------------------------- -;------------------------------------------------------------------------------ +draw_ra_dec_number: +;------------------------------------------------------------------------------- +;draws (posfixed) number with flush right alignment in decimal form +;8x16 number + 8x16 UTF8Z text +;in: +;eax = number +;ebx = right margin coordinates (x shl 16 + y) +;ecx = 0x00RRGGBB +;edx = pointer to postfix string or 0 - no postfix +;------------------------------------------------------------------------------- + pusha + + ror ebx, 16 + mov ebp, eax + + test edx, edx + jz .no_postfix + + mov eax, edx + call count_utf8z_chars + + test eax, eax + jz .no_postfix + push ecx + lea eax, [eax*8] + sub bx, ax + rol ebx, 16 + or ecx, 0xB0000000 + mcall SF_DRAW_TEXT + ror ebx, 16 + pop ecx + +.no_postfix: + mov eax, ebp + push edx + + xor edi, edi + + mov esi, 10 +@@: + xor edx, edx + div esi + inc edi + test eax, eax + jz @f + jmp @b + +@@: + pop edx + mov esi, ecx + or esi, 0x10000000 + mov ecx, ebp + mov edx, ebx + lea eax, [edi*8] + sub dx, ax + rol edx, 16 + mcall SF_DRAW_NUMBER, (11 shl 16) or 0x80000000 + + popa + ret +;------------------------------------------------------------------------------- + +draw_ra_data_size: +;------------------------------------------------------------------------------- +;draws data size with flush right alignment in following form: +;n (for <1024 bytes) or n xB (KB/MB/GB) +;8x16 font +;in: +;eax = number +;ebx = right margin coordinates (x shl 16 + y) +;ecx = 0x00RRGGBB +;------------------------------------------------------------------------------- + pusha + + xor edx, edx + cmp eax, 1024 + ja @f + jmp .draw_text + +@@: + cmp eax, 1024*1024 + jae @f + mov esi, 1024 + div esi + mov edx, strings.KB + jmp .draw_text + +@@: + cmp eax, 1024*1024*1024 + jae @f + mov esi, 1024*1024 + div esi + mov edx, strings.MB + jmp .draw_text + +@@: + mov esi, 1024*1024*1024 + div esi + mov edx, strings.GB + +.draw_text: + call draw_ra_dec_number + + popa + ret +;------------------------------------------------------------------------------- + +draw_ra_text: +;------------------------------------------------------------------------------- +;draws 8x16 UTF8Z text with flush right alignment in decimal form +;in: +;eax = pointer to text string +;ebx = right margin coordinates (x shl 16 + y) +;ecx = 0x00RRGGBB +;------------------------------------------------------------------------------- + pusha + + ror ebx, 16 + mov edx, eax + + call count_utf8z_chars + + test eax, eax + jz .ret + lea eax, [eax*8] + sub bx, ax + rol ebx, 16 + or ecx, 0xB0000000 + mcall SF_DRAW_TEXT + +.ret: + popa + ret +;------------------------------------------------------------------------------- + +draw_button_with_caption: +;------------------------------------------------------------------------------- +;draws button with 8x16 UTF8Z caption in center +;in: +;eax = pointer to button caption or 0 - no caption +;ebx = x shl 16 + y +;ecx = 0x00XXXXXX, where XXXXXX - button ID +;edx = 0x00RRGGBB - button color +;esi = 0x00RRGGBB - text color +;out: +;eax = width of button +;ebx = x+width shl 16 + y +;------------------------------------------------------------------------------- + pusha + + xor ebp, ebp + mov edi, eax + test eax, eax + jz .no_caption_0 + + call count_utf8z_chars + mov ebp, eax + +.no_caption_0: + push ebx esi + lea eax, [ebp*8] + mov esi, edx + mov edx, ecx + mov ecx, ebx + shl ecx, 16 + mov bx, ax + add bx, 3*2 + movzx eax, bx + mov dword [esp+4*2+4*7], eax ;out eax = width + add word [esp+4*2+4*4+2], ax ;out ebx = x+width shl 16 + y + mov cx, BUTTON.HEIGHT + mcall SF_DEFINE_BUTTON + pop esi ebx + test edi, edi + jz .no_caption_1 + mov edx, edi + add ebx, 3 shl 16 + 3 + mov ecx, esi + or ecx, 0xB0000000 + mcall SF_DRAW_TEXT + +.no_caption_1: + popa + ret +;------------------------------------------------------------------------------- + +count_utf8z_chars: +;------------------------------------------------------------------------------- +;in: +;eax = pointer to UTF8Z string +;out: +;eax = count of chars (excluding finishing zero) (0 if string is empty or invalid) +;------------------------------------------------------------------------------- + push esi ebx + mov esi, eax + xor ebx, ebx + +.0: + lodsb + test al, al + jz .ok + inc ebx + cmp al, 0x7F + ja @f + jmp .0 +@@: + cmp al, 0xC0 + jb .err + cmp al, 0xDF + ja @f + inc esi + jmp .0 + +@@: + cmp al, 0xEF + ja @f + inc esi + inc esi + jmp .0 + +@@: + cmp al, 0xF7 + ja .err + add esi, 3 + jmp .0 + +.ok: + mov eax, ebx + pop ebx esi + ret + +.err: + xor eax, eax + pop ebx esi + ret +;------------------------------------------------------------------------------- + +; DATA AREA +;------------------------------------------------------------------------------- +system_path db "/sys/lib/" +library_name db "box_lib.obj", 0 + +;------------------------------------------------------------------------------- align 4 myimport: -edit_box_draw dd aEdit_box_draw -edit_box_key dd aEdit_box_key -edit_box_mouse dd aEdit_box_mouse -;version_ed dd aVersion_ed +edit_box_draw dd aEdit_box_draw +edit_box_key dd aEdit_box_key +edit_box_mouse dd aEdit_box_mouse +;version_ed dd aVersion_ed -init_checkbox dd aInit_checkbox -check_box_draw dd aCheck_box_draw -check_box_mouse dd aCheck_box_mouse -;version_ch dd aVersion_ch +init_checkbox dd aInit_checkbox +check_box_draw dd aCheck_box_draw +check_box_mouse dd aCheck_box_mouse +;version_ch dd aVersion_ch -;option_box_draw dd aOption_box_draw -;option_box_mouse dd aOption_box_mouse -;version_op dd aVersion_op +;option_box_draw dd aOption_box_draw +;option_box_mouse dd aOption_box_mouse +;version_op dd aVersion_op - dd 0 - dd 0 + dd 0 + dd 0 -aEdit_box_draw db 'edit_box',0 -aEdit_box_key db 'edit_box_key',0 -aEdit_box_mouse db 'edit_box_mouse',0 -;aVersion_ed db 'version_ed',0 +aEdit_box_draw db "edit_box",0 +aEdit_box_key db "edit_box_key",0 +aEdit_box_mouse db "edit_box_mouse",0 +;aVersion_ed db "version_ed",0 -aInit_checkbox db 'init_checkbox2',0 -aCheck_box_draw db 'check_box_draw2',0 -aCheck_box_mouse db 'check_box_mouse2',0 -;aVersion_ch db 'version_ch',0 +aInit_checkbox db "init_checkbox2",0 +aCheck_box_draw db "check_box_draw2",0 +aCheck_box_mouse db "check_box_mouse2",0 +;aVersion_ch db "version_ch",0 -;aOption_box_draw db 'option_box_draw',0 -;aOption_box_mouse db 'option_box_mouse',0 -;aVersion_op db 'version_op',0 -;------------------------------------------------------------------------------ +;aOption_box_draw db "option_box_draw",0 +;aOption_box_mouse db "option_box_mouse",0 +;aVersion_op db "version_op",0 +;------------------------------------------------------------------------------- align 4 -check1 check_box2 (10 shl 16)+12,(383 shl 16)+12,6, 0x80D6DEE7,0x4C5258,0,check_text, ch_flag_middle ;ch_flag_en +check1 check_box2 CHECKBOX.X shl 16 + 12, CHECKBOX.Y shl 16 + 12, 6, 0x80D6DEE7, 0x4C5258, 0xB0000000, strings.checkbox_caption, ch_flag_top check1_end: -edit1 edit_box 350,95,381,0xffffff,0x6f9480,0,0xAABBCC,0,start_application_c,\ - start_application,mouse_dd,ed_focus,start_application_e,start_application_e +edit1 edit_box EDITBOX.WIDTH, EDITBOX.X, EDITBOX.Y, 0xffffff, 0x6f9480, 0, 0xAABBCC, 0, start_application_c,\ + start_application,mouse_dd,ed_focus,start_application_e,start_application_e edit1_end: -list_start dd 0 -;------------------------------------------------------------------------------ +list_start dd 0 +;------------------------------------------------------------------------------- align 4 sys_reboot: - dd SSF_START_APP - dd 0 - dd 0 - dd 0 - dd 0 - db '/sys/end',0 -;------------------------------------------------------------------------------ + dd SSF_START_APP + dd 0 + dd 0 + dd 0 + dd 0 + db "/sys/end",0 +;------------------------------------------------------------------------------- +strings: if lang eq de -text: - db 'NAME/BEENDEN PID CPU-LAST % ' - db 'SPEICHER START/NUTZUNG W-STACK W-POS' -text_len = $-text - -tbts: db 'SEITE ZURUECK SEITE VOR REBOOT SYSTEM' -tbte: -tbts_3 db 'START' -tbte_2: -check_text db 'System',0 -title db 'Prozesse - Ctrl/Alt/Del',0 -;-------------------------------------- + .window_caption utf8z "Prozesse - [Ctrl+Alt+Del]" + .tmp_window_caption db "Process manager v0.2 - [Ctrl+Alt+Del]", 0 + + .process_name utf8z "NAME/BEENDEN" + .ptid utf8z "PID/TID" + .cpu_usage_cycles utf8z "CPU(ZYKLEN)" + .cpu_usage_percent utf8z "CPU(%)" + .memory_usage utf8z "SPEICHER" + .window_stack_pos utf8z "W-STACK" + .window_position.x utf8z "W-POS-X" + .window_position.y utf8z "W-POS-Y" + + .previous_page utf8z "SEITE ZURUECK" + .next_page utf8z "SEITE VOR" + .reboot utf8z "REBOOT SYSTEM" + .run utf8z "START" + + .checkbox_caption utf8z "System" + + .KB utf8z " KB" + .MB utf8z " MB" + .GB utf8z " GB" +;------------------------------------------------------------------------------- else if lang eq et -text: - db 'NIMI/LÕPETA PID CPU-KASUTUS % ' - db 'MÄLU ALGUS/KASUTUS W-PUHVER W-SUURUS' -text_len = $-text - -tbts: db 'EELMINE LEHT JÄRGMINE LEHT REBOODI SÜSTEEM' -tbte: -tbts_3 db 'START' -tbte_2: -check_text db 'System',0 -title db 'Protsessid - Ctrl/Alt/Del' -;-------------------------------------- + .window_caption utf8z "Protsessid v0.2 - [Ctrl+Alt+Del]" + .tmp_window_caption db "Process manager v0.2 - [Ctrl+Alt+Del]", 0 + + .process_name utf8z "NIMI/LÕPETA" + .ptid utf8z "PID/TID" + .cpu_usage_cycles utf8z "CPU(TSÜKLID)" + .cpu_usage_percent utf8z "CPU(%)" + .memory_usage utf8z "MÄLU" + .window_stack_pos utf8z "W-PUHVER" + .window_position.x utf8z "W-POS-X" + .window_position.y utf8z "W-POS-Y" + + .previous_page utf8z "EELMINE LEHT" + .next_page utf8z "JÄRGMINE LEHT" + .reboot utf8z "REBOODI SÜSTEEM" + .run utf8z "START" + + .checkbox_caption utf8z "System" + + .KB utf8z " KB" + .MB utf8z " MB" + .GB utf8z " GB" +;------------------------------------------------------------------------------- else if lang eq ru -text: - db 'ˆŒŸ/‡€‚…˜ˆ’œ PID CPU-‡€ƒ“‡Š€ % ' - db '€ŒŸ’œ €—€‹Ž/‚‘…ƒŽ W-STACK W-POS' -text_len = $-text - -tbts: db '…„.‘’ ‘‹…„.‘’ ……‡€ƒ“‡Š€' -tbte: -tbts_3 db '‡€“‘Š' -tbte_2: -check_text db '‘¨á⥬­ë¥',0 -title db '„¨á¯¥âç¥à ¯à®æ¥áᮢ - Ctrl/Alt/Del',0 -;-------------------------------------- + .window_caption utf8z "????????? ????????? v0.2 - [Ctrl+Alt+Del]" + .tmp_window_caption db "Process manager v0.2 - [Ctrl+Alt+Del]", 0 + + .process_name utf8z "???/?????????" + .ptid utf8z "PID/TID" + .cpu_usage_cycles utf8z "CPU(?????)" + .cpu_usage_percent utf8z "CPU(%)" + .memory_usage utf8z "??????" + .window_stack_pos utf8z "W-STACK" + .window_position.x utf8z "W-POS-X" + .window_position.y utf8z "W-POS-Y" + + .previous_page utf8z "????. ???." + .next_page utf8z "????. ???." + .reboot utf8z "????????????" + .run utf8z "??????" + + .checkbox_caption utf8z "?????????" + + .KB utf8z " ??" + .MB utf8z " ??" + .GB utf8z " ??" +;------------------------------------------------------------------------------- else if lang eq it -text: - db 'NOME-PROGRAMMA PID USO CPU % ' - db 'MEMORY START/USAGE W-STACK W-POS' -text_len = $-text - -tbts: db 'INDIETRO AVANTI RIAVVIA SISTEMA' -tbte: -tbts_3 db 'START' -tbte_2: -check_text db 'System',0 -title db 'Gestore processi - Ctrl/Alt/Del',0 -;-------------------------------------- + .window_caption utf8z "Gestore processi v0.2 - [Ctrl+Alt+Del]" + .tmp_window_caption db "Process manager v0.2 - [Ctrl+Alt+Del]", 0 + + .process_name utf8z "NOME-PROGRAMMA" + .ptid utf8z "PID/TID" + .cpu_usage_cycles utf8z "CPU(CICLI)" + .cpu_usage_percent utf8z "CPU(%)" + .memory_usage utf8z "MEMORY" + .window_stack_pos utf8z "W-STACK" + .window_position.x utf8z "W-POS-X" + .window_position.y utf8z "W-POS-Y" + + .previous_page utf8z "INDIETRO" + .next_page utf8z "AVANTI" + .reboot utf8z "RIAVVIA SISTEMA" + .run utf8z "START" + + .checkbox_caption utf8z "System" + + .KB utf8z " KB" + .MB utf8z " MB" + .GB utf8z " GB" +;------------------------------------------------------------------------------- else -text: - db 'NAME/TERMINATE PID CPU-USAGE % ' - db 'MEMORY START/USAGE W-STACK W-POS' -text_len = $-text - -tbts: db 'PREV PAGE NEXT PAGE REBOOT SYSTEM' -tbte: -tbts_3 db ' RUN' -tbte_2: -check_text db 'System',0 -title db 'Process manager - Ctrl/Alt/Del',0 - + .window_caption utf8z "Process manager v0.2 - [Ctrl+Alt+Del]" + .tmp_window_caption db "Process manager v0.2 - [Ctrl+Alt+Del]", 0 + + .process_name utf8z "NAME/TERMINATE" + .ptid utf8z "PID/TID" + .cpu_usage_cycles utf8z "CPU(CYCLES)" + .cpu_usage_percent utf8z "CPU(%)" + .memory_usage utf8z "MEMORY" + .window_stack_pos utf8z "W-STACK" + .window_position.x utf8z "W-POS-X" + .window_position.y utf8z "W-POS-Y" + + + .previous_page utf8z "PREV PAGE" + .next_page utf8z "NEXT PAGE" + .reboot utf8z "REBOOT SYSTEM" + .run utf8z "RUN" + + .checkbox_caption utf8z "System" + + .KB utf8z " KB" + .MB utf8z " MB" + .GB utf8z " GB" end if -; ---------------------------------------------------------------------------- ; +;------------------------------------------------------------------------------- align 4 tinfo: - dd SSF_START_APP - dd 0 -.params dd .params_buf - dd 0 - dd 0 - db 0 -.file_path dd sz_tinfo_file_path + dd SSF_START_APP + dd 0 +.params dd .params_buf + dd 0 + dd 0 + db 0 +.file_path dd sz_tinfo_file_path align 4 .params_buf: -times 11 db 0 ; at now 4 bytes will be enough, but may be in the future not +times 11 db 0 ; at now 4 bytes will be enough, but may be in the future not align 4 -sz_tinfo_file_path db "/sys/tinfo",0 -; ---------------------------------------------------------------------------- ; +sz_tinfo_file_path db "/sys/tinfo",0 +;------------------------------------------------------------------------------- align 4 file_start: - dd SSF_START_APP - dd 0 - dd 0 - dd 0 - dd 0 -start_application: db '/sys/LAUNCHER',0 + dd SSF_START_APP + dd 0 + dd 0 + dd 0 + dd 0 +start_application: db "/sys/LAUNCHER",0 start_application_e=$-start_application-1 -; times 60 db 0 - rb 60 +; times 60 db 0 + rb 60 start_application_c=$-start_application-1 -;------------------------------------------------------------------------------ +;------------------------------------------------------------------------------- IM_END: -;------------------------------------------------------------------------------ +;------------------------------------------------------------------------------- align 4 sc system_colors -winxpos rd 1 -winypos rd 1 -mouse_dd rd 1 -cpu_percent rd 1 -list_add rd 1 -curposy rd 1 -index rd 1 -tasklist rd display_processes -time_counter rd 1 +winxpos rd 1 +winypos rd 1 +mouse_dd rd 1 +cpu_percent rd 1 +list_add rd 1 +curposy rd 1 +index rd 1 +tasklist rd DISPLAY_PROCESSES +time_counter rd 1 -window_status rd 1 -client_area_x_size rd 1 -client_area_y_size rd 1 -bar_bacground_color rd 1 -btn_bacground_color rd 1 -draw_window_flag rd 1 -;------------------------------------------------------------------------------ +window_status rd 1 +client_area_x_size rd 1 +client_area_y_size rd 1 +bar_bacground_color rd 1 +btn_bacground_color rd 1 +draw_window_flag rd 1 +;------------------------------------------------------------------------------- align 4 library_path: process_info_buffer process_information -;------------------------------------------------------------------------------ +;------------------------------------------------------------------------------- align 4 cur_dir_path: - rb 1024 - rb 1024 + rb 1024 + rb 1024 stack_area: U_END: