;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; MENUBAR for MenuetOS - Compile with fasm ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use32 org 0x0 db 'MENUET01' ; 8 byte id dd 0x01 ; required OS version dd START ; program start dd I_END ; program image size dd 0xB000 ; reguired amount of memory - 64 Kb dd 0xA000 ; esp dd 0x0,0x0 ; param, icon include 'lang.inc' include 'macros.inc' width dd 305 buttons dd 1 ; 0 no frames ; 1 frames soften_up dd 1 ; 0 no ; 1 yes soften_down dd 0 ; 0 no ; 1 yes minimize_left dd 1 minimize_right dd 1 icons_position dd 95 menu_enable dd 1 setup_enable dd 0 graph_text dd 1 soften_middle dd 1 ; 0 no ; 1 yes icons dd 1 ; 0 defaults ; 1 activate dat db 'PANEL DAT' PANEL_HEIGHT = 18 ;mainalive db 1 ;correct_display: ; mov eax,15 ; mov ebx,3 ; int 0x40 ; mcall 5, 300 ; jmp correct_display chlangproc: ; mcall 18, 7 ; mov [my_process],eax begin_2: mcall 40,0b ; 0 begin: .begin: mcall 5, eax begin_3: mcall 18, 7 mov [active_process],eax ; cmp [mainalive], 0 ; je .exit mcall 66, 3 mov ah,al and al,100000b cmp al,100000b je change_start_end mov al,ah and al,10000b cmp al,10000b je change_start_end mov al,ah and al,1000b cmp al,1000b je change_key_lang_1 mov al,ah and al,100b cmp al,100b je change_key_lang_1 mov al,ah and al,1111b cmp al,11b jne begin mcall 19, file_sys, syslang call syslang_music ; mcall 5, 25 begin_1: mov ecx,[active_process] mcall 18, 3 mcall 5, 25 jmp begin change_key_lang_1: mov al,ah and al,11b cmp al,01b je change_key_lang cmp al,10b jne begin change_key_lang: mcall 19, file_sys, chlang call chlang_music ; mcall 5, 25 jmp begin_1 change_start_end: mov al,ah and al,1100b cmp al,1000b je start_end cmp al,100b jne start_menu start_end: ; mov ecx,[my_process] ; mcall 18, 3 mcall 18,12 cmp al,1 je scan_codes cmp ah,255 jne begin start_end_application: mcall 19,file_end,0 mcall 5 ,50 jmp begin scan_codes: cmp ah,88 je start_end_application jmp begin start_menu: mcall 18,12 mov [button_presssed_alt],eax mov [draw_window_1],1 ; mov ecx,eax ; mcall 47,0x40100, ,10 shl 16+5,0 ; mov eax,ecx cmp al,1 je scan_codes2 cmp ah,72 ;232 je start_menu_application cmp ah,73 ;233 je start_menu_application cmp ah,0x35 ;b6 ;53 je kill_active_application cmp ah,0x9 jne begin jmp begin kill_active_application: mcall 18, 7 mov ecx,eax ; mcall 9, area9 ; mov eax,area9 ; mov ecx,[eax+4] mcall 18, 2 jmp begin start_menu_application: mcall 19,filename,0 call menu_music mcall 5,50 jmp begin scan_codes2: cmp ah,91 je start_menu_application cmp ah,92 je start_menu_application cmp ah,83 ;62 je kill_active_application cmp ah,71 ;179 jne no_test_179 cmp [page_list],15 je @f inc [page_list] mov [draw_window_1],1 @@: jmp begin no_test_179: cmp ah,72 ;180 jne no_test_180 cmp [page_list],0 je @f dec [page_list] mov [draw_window_1],1 @@: jmp begin no_test_180: jmp begin button_presssed_alt dd 0 active_process dd 0 my_process dd 0 calendar_music: mcall 55, eax, , , calendarmusic ret setup_music: mcall 55,eax, , ,setupmusic ret sysmeter_music: mcall 55,eax, , ,sysmetermusic ret button_music: mcall 55,eax, , ,buttonmusic ret syslang_music: mcall 55, eax, , , syslangmusic ret chlang_music: mcall 55, eax, , , chlangmusic ret menu_music: mcall 55,eax, , ,menumusic ret chlangmusic: db 0x82,0x60,0x83,0x65,0x82,0x60,0 syslangmusic: db 0x82,0x65,0x83,0x70,0x82,0x65,0 menumusic: db 0x82,0x50,0x84,0x48,0x82,0x50,0x84,0x53,0x82,0x51,0 activatemusic: db 0x83,0x30,0x85,0x60,0 buttonmusic: db 0x85,0x25,0x85,0x40,0 sysmetermusic: db 0x85,0x35,0x85,0x45,0 setupmusic: db 0x85,0x40,0x85,0x50,0 calendarmusic: db 0x85,0x37,0x85,0x48,0 ; .exit: mcall -1 START: mov eax, 6 mov ebx, dat mov ecx, 0 mov edx, -1 mov esi, I_END int 0x40 mov eax,40 mov ebx,0101b int 0x40 mov edi,width mov esi,I_END mov eax,0 new_number: cmp [esi],byte ';' je number_ready imul eax,10 movzx ebx,byte [esi] sub ebx,'0' add eax,ebx inc esi jmp new_number number_ready: mov [edi],eax mov eax,0 add edi,4 inc esi cmp [esi],byte 'x' jne new_number mcall 14 mov [screen_size],eax mcall 48,5 mov ecx,eax lea edx,[ebx-PANEL_HEIGHT-1] mcall 48,6 call set_variables mcall 51, 1, chlangproc, 0xB000 ; mcall 5, 5 ; mcall 51, 1, correct_display, 0xA800 start_after_minimize: call draw_window call draw_info call draw_running_applications mov eax, 23 mov ebx, 30 int 0x40 still: ; mcall 13,<390,70>,<3,11>,0xffffff ; mov ecx,[button_presssed_alt] ; mcall 47,0x80100,ecx ,400 shl 16+5,0 call draw_info call draw_running_applications mov eax, 23 mov ebx, 20 int 0x40 cmp eax,1 ; redraw ? jz red cmp eax,3 ; button ? jz button jmp still red: ; redraw window mcall 14 movzx ecx,ax mov edx,eax shr edx,16 cmp [screen_size.height],ax jne @f rol eax,16 cmp [screen_size.width],ax je .lp1 rol eax,16 @@: mov [screen_size],eax sub ecx,PANEL_HEIGHT mcall 67,0,,,PANEL_HEIGHT .lp1: call draw_window call draw_info jmp still button: ; button mov eax,17 int 0x40 cmp ah,50 jb no_activate cmp ah,70 jg no_activate movzx ecx,byte ah sub ecx,52 shl ecx,2 mov eax,18 mov ebx,3 mov ecx,[app_list+ecx] int 0x40 ; cmp [music_type],0 ; je still mcall 55,eax, , ,activatemusic jmp still no_activate: cmp ah,101 ; minimize to left je left_button cmp ah,102 ; minimize to right je right_button cmp ah,byte 1 ; start/terminate menu jnz noselect call menu_handler ; cmp [music_type],0 ; je still call menu_music jmp still noselect: cmp ah,byte 2 ; start calendar jnz noid15 ;noclock mov eax, 19 mov ebx, file6 xor ecx, ecx int 0x40 call calendar_music jmp still ; noclock: ; cmp ah,byte 11 ; start file 1 ; jnz nob1 ; mov eax,19 ; mov ebx,file1 ; int 0x40 ; jmp still ; nob1: ; cmp ah,byte 12 ; start file 2 ; jnz nob2 ; mov eax,19 ; mov ebx,file2 ; int 0x40 ; jmp still ; nob2: ; cmp ah,byte 13 ; start file 3 ; jnz nob3 ; mov eax,19 ; mov ebx,file3 ; int 0x40 ; jmp still ; nob3: ; cmp ah,14 ; start file 4 ; jne noid14 ; mov eax,19 ; mov ebx,file4 ; mov ecx,file4_par ; int 0x40 ; jmp still ; noid14: ; cmp ah,15 ; start file 5 ; jne noid15 ; mov eax,19 ; mov ebx,file5 ; int 0x40 ; jmp still noid15: cmp ah,16 jne noid16 mcall 19, file_sys, chlang call chlang_music mcall 5, 25 jmp still noid16: cmp ah,17 jne noid17 mcall 19, file_sys, syslang call syslang_music mcall 5, 25 jmp still noid17: cmp ah,18 jne noid18 mcall 19, sysmeter, 0 call sysmeter_music jmp still noid18: cmp ah,19 jne noid19 ; inc [music_type] ; and [music_type],1 mcall 18,8,2 ; mcall 18,8 ; mov [sound_flag],al ; mcall 15,4,2 mcall 15,3 jmp red noid19: cmp ah,20 ; start system setup jnz noid20 mov eax, 19 mov ebx, file_sys xor ecx, ecx int 0x40 call setup_music noid20: cmp ah,21 jnz noid21 cmp [page_list],15 je @f inc [page_list] jmp red @@: jmp still noid21: cmp ah,22 jnz noid22 cmp [page_list],0 je @f dec [page_list] jmp red @@: jmp still noid22: jmp still draw_running_applications: pusha cmp [icons],1 jne dr_ret call calculate_applications cmp edi,[running_applications] jne noret popa ret noret: ; cmp edi,[running_applications] ; jge no_application_decrease call draw_window ; no_application_decrease: mov [running_applications],edi mov edi,0 mov ecx,2 mov [contrast],0 mov eax,[max_applications] mov ebx,[page_list] xor edx,edx mul ebx cmp eax,0 je @f inc eax @@: mov [draw_start_position],eax newpr: mov eax,9 mov ebx,0x8000 int 0x40 push eax push ecx cmp eax,ecx jb norpl2 cmp byte [0x8000+10], '@' je norpl cmp [0x8000+10],dword 'ICON' jne .noicon cmp dword[0x8000+42],51 jne .noicon cmp dword[0x8000+46],51 je norpl .noicon: cmp [0x8000+11],dword 'ENU ' je norpl ; cmp [0x8000+12],dword 'NEL ' ; je norpl cmp [0x8000+10],dword ' ' je norpl dec [draw_start_position] cmp [draw_start_position],0 jg norpl mov eax,13 mov ebx,edi inc ebx shl ebx,16 imul ebx,6*10 add ebx,17 shl 16+54 mov ecx,3 shl 16+14 xor edx,edx sub ebx,10 shl 16 int 0x40 sub ebx,1 shl 16 mov bx,1 mov ecx,4 shl 16+12 int 0x40 sub ebx,1 shl 16 mov ecx,5 shl 16+10 int 0x40 add ebx,56 shl 16 mov ecx,4 shl 16+12 int 0x40 add ebx,1 shl 16 mov ecx,5 shl 16+10 int 0x40 inc [contrast] and [contrast],1 cmp [contrast],1 je contrast1 mov edx,0x88ff jmp contrast2 contrast1: mov edx,0x55ff contrast2: sub ebx,55 shl 16 mov bx,54 mov ecx,4 shl 16+12 ; mov edx,0x66ff int 0x40 sub ebx,1 shl 16 mov bx,1 mov ecx,5 shl 16+10 int 0x40 add ebx,55 shl 16 int 0x40 mov eax,4 mov ebx,edi inc ebx shl ebx,16 imul ebx,6*10 ;13 add ebx,20*65536+7 mov ecx,0xffffff ;[wcolor] ; add ecx,0x303030 mov edx,0x8000+10 mov esi,11 sub ebx,10 shl 16 int 0x40 norpl2: inc edi norpl: pop ecx pop eax inc ecx cmp edi,[max_applications] jb newpr nompr: dr_ret: popa ret calculate_applications: mov eax,[max_applications] mov ebx,[page_list] xor edx,edx mul ebx cmp eax,0 je @f inc eax @@: mov [draw_start_position],eax mov edi,app_list mov ecx,20 mov eax,0xff cld rep stosd mov edi,0 mov ecx,2 cnewpr: mov eax,9 mov ebx,0x8000 int 0x40 cmp byte [0x8000+10], '@' je cnorpl cmp [0x8000+10],dword 'ICON' jne .noicon cmp dword[0x8000+42],51 jne .noicon cmp dword[0x8000+46],51 je cnorpl .noicon: cmp [0x8000+11],dword 'CON ' je cnorpl cmp [0x8000+11],dword 'ENU ' je cnorpl ; cmp [0x8000+12],dword 'NEL ' ; je cnorpl cmp [0x8000+10],dword ' ' je cnorpl dec [draw_start_position] cmp [draw_start_position],0 jg cnorpl mov [app_list+edi*4],ecx inc edi cnorpl: inc ecx cmp eax,ecx jge cnewpr ret draw_application_buttons: pusha cmp [icons],1 jne da_ret mov eax,14 int 0x40 shr eax,16 cmp eax,639 jne now1 mov [max_applications],7 ;6 now1: cmp eax,799 jne now2 mov [max_applications],9 ;10 ;8 now2: cmp eax,1023 jne now3 mov [max_applications],12 ;13 ;8 now3: cmp eax,1279 jne now4 mov [max_applications],17 ;18 ;8 now4: mov edi,1 nb: mov eax,8 mov ebx,edi shl ebx,16 imul ebx,6*10 ;13 add ebx,15*65536+10*6-1 ;13 mov ecx,1*65536+17 mov edx,edi add edx,51 cmp [buttons],1 je bufr or edx,0x60000000 bufr: mov esi,[wcolor] sub ebx,11 shl 16 int 0x40 inc edi cmp edi,[max_applications] jbe nb da_ret: popa ret menu_handler: mov eax, 19 mov ebx, filename xor ecx, ecx int 0x40 ret draw_small_right: pusha mov eax,12 mov ebx,1 int 0x40 mov eax,0 mov edx,[wcolor] mov esi,edx mov edi,edx or edx, 0x01000000 int 0x40 mov eax,8 mov ebx,0*65536+9 mov ecx,0*65536 mov cx,[b_size_y] mov edx,1 mov esi,[wcolor] int 0x40 mov eax,4 mov ebx,2*65536+16 cmp [graph_text],1 jne nos3 mov ebx,2*65536+7 nos3: mov ecx,[wcolor] add ecx,0x303030 mov edx,hidetext mov esi,1 int 0x40 mov eax,12 mov ebx,2 int 0x40 popa ret draw_small_left: pusha mov eax,12 mov ebx,1 int 0x40 mov eax,0 mov edx,[wcolor] mov esi,edx mov edi,edx or edx, 0x01000000 int 0x40 cmp [graph_text],1 je nos4 mov eax,8 mov ebx,0*65536+9 mov ecx,0*65536+18-6 mov edx,2 mov esi,[wcolor] int 0x40 mov eax,4 mov ebx,2*65536+4 mov ecx,[wcolor] add ecx,0x303030 mov edx,hidetext+2 mov esi,1 int 0x40 nos4: mov eax,8 mov ebx,0*65536+9 mov ecx,13*65536+25 cmp [graph_text],1 jne nos6 mov ecx,0*65536 mov cx,word [b_size_y] nos6: mov edx,1 mov esi,[wcolor] int 0x40 mov eax,4 mov ebx,3*65536+22 cmp [graph_text],1 jne nos7 mov ebx,3*65536+7 nos7: mov ecx,[wcolor] add ecx,0x303030 mov edx,hidetext+1 mov esi,1 int 0x40 mov eax,12 mov ebx,2 int 0x40 popa ret ;------------------------------------------------- right_button: call button_music mov [small_draw],dword draw_small_right mcall 14 shr eax, 16 mov ebx, eax mov ecx, -1 mov edx, 9 sub ebx, edx mov esi, -1 mcall 67 call draw_small_right mov eax, 23 mov ebx, 30 int 0x40 jmp small_wait ;------------------------------------------------- left_button: call button_music mov [small_draw],dword draw_small_left mov ebx, 0 mov edx, 9 mov ecx, -1 mov esi, -1 mcall 67 call draw_small_left mov eax, 23 mov ebx, 30 int 0x40 ;------------------------------------------------- small_wait: mov eax, 10 int 0x40 cmp eax,1 jne no_win call [small_draw] jmp small_wait no_win: mov eax,17 int 0x40 cmp ah,1 jne no_full mov eax, 14 ; get screen max x & max y int 0x40 mov edx, eax shr edx, 16 xor ebx, ebx mov ecx, -1 mov esi, -1 mcall 67 ; x0 y0 xs ys call button_music jmp still no_full: call menu_handler jmp small_wait set_variables: pusha mov [b_size_y],dword 38 cmp [graph_text],1 jne noy2 mov [b_size_y],dword 18 noy2: mov [button_frames],0x0 cmp [buttons],0 jne no_frames mov [button_frames],0x40000000 no_frames: mov eax,48 ; 3d button look mov ebx,1 mov ecx,1 int 0x40 mov eax,0x40404040 ; dividers for processes mov edi,pros mov ecx,10 cld rep stosd popa ret ; eax = number (1 or 2) ; ebx = language id draw_flag: pusha ; cmp [graph_text],0 ; je mini_flag ; eax = 2 BIG ; eax = 1 small mov edx,ebx mov ebx,[maxx] and eax,1 imul eax,17 ;17 sub ebx,eax sub ebx,76 ;79 ;28 pushad ; dec ebx sub ebx,2 shl ebx, 16 add ebx, 15 ;25 mov ecx, 4*65536+13 mov edx,0 mov eax,13 int 0x40 add ebx,1 shl 16 sub ebx,2 mov ecx, 5 shl 16+11 cmp [type_lang],1 je label_1 mov edx,0xff ;[wcolor] jmp label_2 label_1: mov edx,0x7700 label_2: mov eax, 13 int 0x40 popad shl ebx,16 add ebx,7 ;24 mov ecx,[bte] ; color dec edx shl edx,1 add edx,flag_text mov esi,2 mov eax,4 int 0x40 mov ebx,[maxx] sub ebx,48 shl ebx,16 mov bx,34 mov ecx,3 shl 16+14 xor edx,edx mov eax,13 int 0x40 add ebx,1 shl 16 sub ebx,2 mov ecx,4 shl 16+12 mov edx,0x66cc int 0x40 popa ret ;mini_flag: ; popa ; ret ; *************************************************** ; ********* WINDOW DEFINITIONS AND DRAW ************* ; *************************************************** draw_window: pusha mov [running_applications],-1 mov [checks],-1 mov eax, 12 ; tell os about redraw mov ebx, 1 int 0x40 mov eax, 48 mov ebx, 3 mov ecx, system_colours mov edx, 10*4 int 0x40 mov eax, [system_colours+4*6] mov [wcolor], eax mov eax,14 ; get screen max x & max y int 0x40 cmp [width],0 je no_def_width and eax,0xffff mov ebx,[width] shl ebx,16 add eax,ebx no_def_width: mov ebx,eax mov [screenxy],ebx shr ebx,16 sub ax,38 shl eax,16 mov ecx,eax add ecx,0*65536+38 cmp [graph_text],1 jne no_text_1 mov cx,PANEL_HEIGHT add ecx,20*65536 no_text_1: mov eax, 0 ; DEFINE AND DRAW WINDOW mov edx, [wcolor] or edx, 0x01000000 ; do not draw the window mov esi, [wcolor] or esi, 0x01000000 ; unmovable window mov edi, [wcolor] int 0x40 movzx ebx,word [screenxy+2] mov ecx,0*65536+0 mov edx,[wcolor] add edx,0x161616 newline: sub edx,0x040404 mov eax,38 cmp [soften_up],1 jne no_su and edx,0x00FFFFFF int 0x40 no_su: pusha cmp [soften_down],1 jne no_sd sub edx,0x141414 mov edi,[b_size_y] shl edi,16 add edi,[b_size_y] add ecx,edi sub ecx,3*65536+3 and edx,0x00FFFFFF int 0x40 no_sd: popa add ecx,1*65536+1 cmp cx,5 jb newline cmp [soften_middle],1 jne no_sm movzx ebx,word [screenxy+2] mov ecx,5*65536+5 mov esi,stripe mov edx,[wcolor] newline3: add edx,[esi] add esi,4 mov eax,38 and edx,0x00FFFFFF int 0x40 add ecx,1*65536+1 cmp cx,15 jb newline3 no_sm: cmp [minimize_left],1 jne no_mleft mov eax,8 ; ABS LEFT mov ebx,0 *65536+9 mov ecx,1 *65536 add ecx,[b_size_y] dec ecx mov edx,101 add edx,[button_frames] mov esi,[wcolor] int 0x40 mov eax,4 ; HIDE TEXT mov ebx,2*65536+17 cmp [graph_text],1 jne no_y1 mov bx,7 no_y1: mov ecx,[wcolor] add ecx,0x303030 mov edx,hidetext mov esi,1 int 0x40 no_mleft: movzx eax,word [screenxy+2] mov [maxx],eax cmp [minimize_right],1 jne no_mright mov eax,[maxx] sub eax,77 shl eax,16 mov ebx,eax add ebx,67 mov eax,8 ; ABS RIGHT mov ecx,1 *65536 add ecx,[b_size_y] dec ecx add ebx,68*65536 mov bx,9 mov edx,102 add edx,[button_frames] mov esi,[wcolor] int 0x40 mov edx,hidetext+1 mov eax,4 mov ebx,[maxx] sub ebx,6 shl ebx,16 mov bx,17 cmp [graph_text],1 jne no_y2 mov bx,7 no_y2: mov ecx,[wcolor] add ecx,0x303030 mov esi,1 int 0x40 no_mright: call draw_menuet_icon call draw_program_icons mov [ptime],0 call draw_info call draw_application_buttons ; mov ecx,[button_presssed_alt] ; mcall 47,0x80100,ecx ,400 shl 16+5,0 mov eax,12 mov ebx,2 int 0x40 popa ret draw_menuet_icon: pusha cmp [menu_enable],1 jne no_menu mov eax, 8 ; M BUTTON mov ebx, 10*65536 + 47 cmp [minimize_left], 0 jne @f sub ebx, 10*65536 @@: mov ecx, 1*65536 add ecx, [b_size_y] dec ecx mov edx, 0x20000001 add edx, [button_frames] mov esi, [wcolor] int 0x40 cmp [graph_text], 1 jne no_mtext push ebx mov eax,13 mov ebx,12 shl 16+44 ;51 mov ecx,1 shl 16+17 xor edx,edx int 0x40 ; mov ebx,63 shl 16+1 mov ebx,56 shl 16+1 mov ecx,2 shl 16+15 int 0x40 mov ebx,57 shl 16+1 mov ecx,4 shl 16+11 int 0x40 mov ebx,58 shl 16+1 mov ecx,6 shl 16+7 int 0x40 ; mov ebx,66 shl 16+1 ; mov ecx,9 shl 16+1 ; int 0x40 mov ebx,13 shl 16+43 ;50 mov ecx,2 shl 16+15 mov edx,0x7700 int 0x40 ; mov ebx,62 shl 16+1 ; mov ecx,3 shl 16+14 ; int 0x40 mov ebx,56 shl 16+1 mov ecx,4 shl 16+11 int 0x40 mov ebx,57 shl 16+1 mov ecx,6 shl 16+7 int 0x40 pop ebx mov eax, 4 mov bx, 7 add ebx, 8*65536 mov ecx, 0x10ffffff mov edx, m_text mov esi, 4 int 0x40 popa ret no_mtext: mov eax,[wcolor] mov [m_icon+4],eax mov eax,6 ; load file mov ebx,m_bmp mov ecx,0 mov edx,200000 mov esi,image mov edi,0 int 0x40 mov eax,40 mov ebx,0 mov edi,image+53 new_m_pix: ; movzx ecx,byte [edi] ; shr ecx,5 mov cl,[edi] cmp cl,10 jb nopix mov cl,[edi+1] cmp cl,10 jb nopix mov cl,[edi+2] cmp cl,10 jb nopix pusha cmp [minimize_left],0 jne no_m_s2 sub ebx,10 no_m_s2: ; mov edx,[ecx*4+m_icon] mov edx,[edi+1] mov ecx,eax mov eax,1 add ebx,12 int 0x40 popa nopix: add edi,3 add ebx,1 cmp ebx,40 jnz new_m_pix mov ebx,0 dec eax jnz new_m_pix no_menu: popa ret draw_program_icons: pusha cmp [icons],0 jne dp_ret mov edi,1 push edi new_icon_file: pusha mov edx,[esp+32] add edx,10 push edx mov esi,[wcolor] mov ecx,1*65536 add ecx,[b_size_y] dec ecx mov eax,edi dec eax imul eax,40 mov ebx,eax add ebx,[icons_position] shl ebx,16 mov bx,39 pop edx add edx,[button_frames] or edx, 0x20000000 mov eax,8 int 0x40 popa mov ecx,[esp] add ecx,48 mov [iconf+6],cl mov eax,6 ; load file mov ebx,iconf mov ecx,0 mov edx,200000 mov esi,image int 0x40 mov eax,0 mov ebx,32 mov edi,image+51+32*33*3 np2: ; new pixel of file mov edx,[edi] and edx,0xffffff cmp eax,3 ; Y draw limits jb nopix2 cmp eax,36 jg nopix2 cmp ebx,38 ; X draw limits jg nopix2 cmp ebx,2 jb nopix2 cmp edx,0 jz nopix2 cmp [graph_text],1 jne no_icon_text pusha mov ebx,[esp+32] dec ebx imul ebx,40 add ebx,8 add ebx,[icons_position] shl ebx,16 mov bx,7 mov eax,4 mov ecx,0xffffff mov edx,[esp+32] dec edx imul edx,4 add edx,mi_text mov esi,4 int 0x40 popa jmp nopix2 no_icon_text: mov esi,[esp] pusha push edx mov ecx,eax add ecx,2 mov eax,esi dec eax imul eax,40 add ebx,eax add ebx,3 add ebx,[icons_position] pop edx mov eax,1 int 0x40 popa nopix2: sub edi,3 dec ebx jnz np2 mov ebx,32 add eax,1 cmp eax,32 jnz np2 add dword [esp],1 mov edi,[esp] cmp dword [esp],4 jbe new_icon_file add esp,4 mov eax,4 mov ebx,40 imul ebx,3 add ebx,[icons_position] add ebx,10 shl ebx,16 mov bx,23 mov ecx,[wcolor] mov edx,gpl mov esi,3 int 0x40 dp_ret: popa ret draw_info: ; draw cpu usage, time, date pusha cmp [setup_enable],1 jne no_setup cmp [minimize_right],0 jne no_m_r add [maxx],10 no_m_r: mov eax,3 int 0x40 cmp eax,[ptime] jz _ret mov [ptime],eax call draw_cpu_usage mov eax,[maxx] ; blink sec sub eax,33 shl eax,16 mov ebx,eax add ebx,9 mov eax,3 int 0x40 cmp [graph_text],1 jne no_y4 sub bx,2 no_y4: mov ecx,eax shr ecx,16 and ecx,1 mov edx,[bte] sub edx,[wcolor] imul ecx,edx add ecx,[wcolor] mov edx,sec mov eax,4 mov esi,1 int 0x40 mov eax,26 ; check for change in time or country mov ebx,5 int 0x40 mov edx,eax mov eax,26 mov ebx,2 mov ecx,9 int 0x40 add edx,eax mov eax,3 int 0x40 and eax,0xffff add edx,eax cmp edx,[checks] je _ret mov [checks],edx mov ebx,[maxx] sub ebx,48 ;;94 ;;74 shl ebx,16 add ebx,33 ;;84 ;;64 mov eax,8 ; time/date button mov ecx,3 *65536 add ecx,[b_size_y] ; dec ecx sub cx,5 mov edx,2+0x20000000 mov esi,[wcolor] int 0x40 pusha mov eax,13 add ebx,10*65536-16 add ecx,5*65536-8 mov edx,[wcolor] int 0x40 popa and edx,0xffff add edx,[button_frames] int 0x40 mov eax,8 mov ebx,[maxx] sub ebx,77 ;80 shl ebx,16 add ebx,12 mov ecx,5 shl 16+10 mov edx,16+0x20000000 ;button 16 mov esi,[wcolor] int 0x40 sub ebx,17 shl 16 inc edx ;button 17 int 0x40 add ebx,33 shl 16 mov bx,8 inc edx ;button 18 int 0x40 sub ebx,47 shl 16 mov bx,10 inc edx ;button 19 int 0x40 sub ebx,14 shl 16 inc edx ;button 20 int 0x40 sub ebx,12 shl 16 mov bx,8 mov ecx,6 shl 16+10 inc edx ;button 21 int 0x40 sub ebx,18 shl 16 inc edx ;button 22 int 0x40 ; flags mov eax,26 mov ebx,5 int 0x40 mov ebx,eax mov eax,1 mov [type_lang],al call draw_flag mov eax,26 mov ebx,2 mov ecx,9 int 0x40 mov ebx,eax mov eax,2 mov [type_lang],al call draw_flag mcall 18,8,1 mov [sound_flag],al mov ebx,[maxx] sub ebx,109 ;112 ;28 shl ebx,16 mov bx,12 mov ecx, 4*65536+13 mov edx,0 mov eax,13 int 0x40 add ebx,1 shl 16 sub bx,2 mov ecx,5 shl 16+11 mov edx,0xcc int 0x40 add ebx,1 shl 16 mov bx,5 mov ecx,8 shl 16+5 mov edx,0xdddd00 int 0x40 add ebx,5 shl 16 mov bx,1 mov ecx,7 shl 16+7 int 0x40 add ebx,1 shl 16 mov ecx,6 shl 16+9 int 0x40 add ebx,1 shl 16 mov ecx,5 shl 16+11 int 0x40 ; cmp [music_type],0 ; jne dalshe cmp [sound_flag],0 je dalshe sub ebx,8 shl 16 ror ebx,16 mov cx,bx rol ebx,16 mov bx,cx add bx,8 mov ecx,5 shl 16+15 mov edx,0xff0000 mov eax,38 int 0x40 add ebx,1 shl 16 inc bx int 0x40 rol ecx,16 int 0x40 sub ebx,1 shl 16 dec bx int 0x40 dalshe: mov ebx,[maxx] sub ebx,123 shl ebx,16 mov bx,12 mov ecx, 4*65536+13 mov edx,0 mov eax,13 int 0x40 add ebx,1 shl 16 sub bx,2 mov ecx,5 shl 16+11 mov edx,0xffcc00 int 0x40 mov eax,4 mov ebx,[maxx] sub ebx,121 shl ebx,16 mov bx,7 mov ecx,0x10000000 mov edx,file_sys mov esi,1 int 0x40 add ebx,1 shl 16 int 0x40 mov edx,0 mov eax,13 mov ebx,[maxx] sub ebx,134 shl ebx,16 mov bx,9 mov ecx,6 shl 16+11 int 0x40 sub ebx,18 shl 16 int 0x40 add ebx,19 shl 16 sub bx,2 mov ecx,7 shl 16+9 mov edx,0xffffff int 0x40 sub ebx,18 shl 16 int 0x40 mov eax,4 mov edx,page_a1 mov ebx,[maxx] sub ebx,150 shl ebx,16 mov bx,8 mov esi,4 int 0x40 add ebx,1 shl 16 int 0x40 mov eax,47 mov ebx,0x10100 mov ecx,[page_list] mov edx,[maxx] sub edx,141 shl edx,16 mov dx,7 mov esi,0xffffff int 0x40 ; sub ebx,14 shl 16 ; mov bx,7 ; mov edx,turn_text ; mov esi,1 ; mov ecx,0x60a060 ;[wcolor] ; add ecx,0x303030 ; mov eax,4 ; int 0x40 ; add ebx,1 shl 16 ; int 0x40 ; add ebx,1 shl 16 ; int 0x40 ; add ebx,1 shl 16 ; int 0x40 ; add ebx,1 shl 16 ; mov ecx,0x60a060 ;[wcolor] ; int 0x40 ; add ebx,1 shl 16 ; int 0x40 ; add ebx,1 shl 16 ; sub ecx,0x303030 ; int 0x40 ; sub ebx,6 shl 16 ; mov bx,1 ; mov ecx,2 shl 16+15 ; mov edx,0x60a060 ;[wcolor] ; add edx,0x303030 ; mov eax,13 ; int 0x40 ; add ebx,1 shl 16 ; mov bx,1 ; mov edx,0x60a060 ;[wcolor] ; int 0x40 ; add ebx,1 shl 16 ; mov bx,1 ; sub edx,0x303030 ; int 0x40 ; add ebx,1 shl 16 ; mov edx,[wcolor] ; int 0x40 mov eax,3 ; get time int 0x40 movzx ebx,al shr eax,8 movzx ecx,al shr eax,8 movzx edx,al ; ebx ecx edx h m s push ebx push ecx mov eax,[maxx] sub eax,32 shl eax,16 mov ebx,eax add ebx,9 mov ecx,[bte] cmp [graph_text],1 jne no_y3 sub bx,2 mov ecx,0xffffff no_y3: mov edx,[esp] ; __:_X and edx,15 mov eax,4 add ebx,10*65536 add edx,text mov esi,1 int 0x40 pop edx ; __:X_ shr edx,4 and edx,15 mov eax,4 sub ebx,6*65536 add edx,text mov esi,1 int 0x40 mov edx,[esp] ; _X:__ and edx,15 mov eax,4 sub ebx,11*65536 add edx,text mov esi,1 int 0x40 pop edx ; X_:__ shr edx,4 and edx,15 mov eax,4 sub ebx,6*65536 add edx,text mov esi,1 int 0x40 call draw_cpu_usage _ret: cmp [minimize_right],0 jne no_m_r2 sub [maxx],10 no_m_r2: no_setup: popa ret draw_cpu_usage: pusha mov [ysi],30 cmp [graph_text],1 jne @f mov [ysi],10 @@: mov eax,18 ; TSC / SEC mov ebx,5 int 0x40 shr eax,20 push eax mov eax,18 ; IDLE / SEC mov ebx,4 int 0x40 shr eax,20 xor edx,edx imul eax,[ysi] cdq pop ebx inc ebx div ebx push eax mov eax,13 mov ebx,[maxx] sub ebx,60 ;;65 shl ebx,16 mov bx,8 push ebx mov eax,13 mov ecx,5*65536 add cx,word [ysi] inc cx push ebx inc ecx sub ebx,1 shl 16 add ebx,2 xor edx,edx int 0x40 dec ecx pop ebx mov edx,0xff0000 ;[wcolor] ; sub edx,0x303030 int 0x40 pop ebx pop eax ; push ebx inc eax mov ecx,5*65536 mov cx,ax ; pop ebx push ecx push ebx sub ecx,1 shl 16 add ecx,1 sub ebx,1 shl 16 add ebx,2 mov eax,13 xor edx,edx int 0x40 pop ebx pop ecx mov edx,0x44aa44 ;[wcolor] ; add edx,0x00101010 int 0x40 popa ret ; DATA stripe: dd -0x010101 dd -0x010101 dd -0x020202 dd -0x010101 dd -0x000000 dd 0x000000 dd 0x010101 dd 0x020202 dd 0x010101 dd 0x010101 m_icon: dd 0x0 dd 0x808080 dd 0x000000 dd 0x000000 dd 0xffffff lsz m_text,\ ru, "����",\ en, "MENU" mi_text db 'WAVETETRBGRDGPL ' flag_text db 'EnFiGeRuFr' type_lang db 0 ;music_type db 1 sound_flag db 0 button_frames dd 0x0 checks dd -1 hidetext db 0x11,0x10,0x1e iconf db 'MBAR_IX BMP' m_bmp db 'MENUET BMP' sysmeter db 'SYSMETER ' file_end db 'END ' file_sys db 'SETUP ' filename db 'MENU ' turn_text db '><' ;file1 db 'SB ' ;file2 db 'TETRIS ' ;file3 db 'PIC4 ' ;file4 db 'TINYPAD ' ;file4_par db 'COPYING.TXT',0 ;file5 db 'MFASM ' file6 db 'CALENDAR ' gpl db 'GPL' chlang db 'LANG',0 syslang db 'SLAN',0 contrast db 0 running_applications dd 0x100 max_applications dd 11 page_list dd 0 draw_start_position dd 0 draw_window_1 db 0 b_size_y: dd 0x0 ysi dd 0 small_draw dd 0x0 ptime dd 0x0 maxx dd 0x0 text db '0123456789' page_a1 db '< >' bte dd 0xccddee wcolor dd 0x506070 sec db ': ' pros db ' ' db ' ' screenxy dd 0x0 stcount dd 0x0 I_END: screen_size: .height dw ? .width dw ? area9 rb 100 system_colours rd 10 app_list rd 50 tictable: rd 256 image: