; Copyright (c) 2009, <Lrz> ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the distribution. ; * Neither the name of the <organization> nor the ; names of its contributors may be used to endorse or promote products ; derived from this software without specific prior written permission. ; ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov nickname <Lrz> ''AS IS'' AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;***************************************************************************** ;;;;;;;;;;;;;;;;;; format MS COFF public EXPORTS section '.flat' code readable align 16 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Get info about ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; include '../../../../macros.inc' align 4 initialization_font: ; esp+0 = dd back ; ��������� ������ - ������� ��� ��������� ���-�� ������ pushad xor eax,eax inc eax mov [number_function],eax ;structure is completed mov eax,70 mov ebx,dword struct_f_info mcall ;IF ERROR FT then exit test eax,eax jnz .exit ;IF ERROR folder is not found then exit test ebx,ebx mov eax,ebx jnz .exit ;Get quantity files mov eax,[buffer_32.quantity_files] imul eax,304 add eax,32 ; ?? push eax ;save eax � eax ������ ������ ��� ������ � ������ ;init memory mov eax,68 mov ebx,11 mcall test eax,eax jz .exit inc ebx ;�������� ���� � ecx ���� pop ecx mov eax,68 mcall mov dword [fulder_array_point],eax ;save point for memory's fulder ;� eax ��������� �� ���� mov [buffer_read_d],eax ;point to new array mov eax,[buffer_32.quantity_files] mov [read_block],eax ;get in buffer info of files and sub dir current dir mov eax,70 mov ebx,dword struct_f_info mcall ;�������� ���������� � ������. mov ebp, dword [buffer_read_d] ;point to structure mov ecx, dword [ebp+4] ;���-�� ������ ���� mov dword [save_ecx],ecx add ebp, 32 ;��������� �� ���� mov dword [save_ebp],ebp cld ;��������� ����� ����������� align 4 .start_loop: push ecx lea edi,[ebp+0x28] ;� edi ��������� �� ������ �����. xor eax,eax mov ecx,263 repne scasb ;������ ����� ������ ;;;;;;;;;;;;;;;;;;;;;;; sub edi,5 ;.ksf,0 lea esi,[name_font] mov eax,dword[edi] or eax,0x20202000 ; ������� ���������� ��������� �������. cmp eax,dword[esi] jnz @f ;;;;;;;; ��� ��� ��� ���� �.�. ��� ����� �� ����� ������ ������ )) ;������ ����� ����� ��������� ��� ��� ��� � ������ ��� ������ ;�������� ��������� ����� � ������ ��� ������ �����. call alloc_mem ; ������� ��� ����� ���������� ; ������ ��� ����� ������������ ��� ����� � ������ ����� mov eax,dword [alloc_memory_point] lea edi,dword [eax+4] lea esi,[name_fulder] mov ecx,name_fuld_end rep movsb ;��������� ���� mov al,'/' stosb lea esi,[ebp+0x28] ;� esi ��������� �� ������ �����. align 4 .loop_b: lodsb stosb test al,al jnz .loop_b ; mov edi,name_of_file ; [ebp+0x28] ;� edi ��������� �� ������ �����. ;get in buffer info above own file xor eax,eax mov dword [number_function],eax mov dword [index_start_block],eax ;������� � ����� ��� ������ ������ mov dword [flags_],eax ;������� ������� ��� ������ ������ mov dword [read_block],8 ;������� ���� ������ ��� ����� 8 ���� mov dword [buffer_read_d],file_buffer ; ��������� �� ����� ���� ����� �������� ������ mov eax,dword [alloc_memory_point] lea edi,dword [eax+4] mov dword [offset_to_string],edi mov eax,70 mov ebx,dword struct_f_info mcall ;;;;;;;;;;;;;;;; �������� ������ ��������� mov eax,ebx mov eax,dword [file_buffer] mov ebx,dword [type_fnt] cmp eax,ebx jnz @f ;;;;;;; ������� ������ ��������� ��� ��������� ������ ��� ������� ��� ����� ; ������ ����� ���������������� ����� �.�. �� ���� ���������� ����� ���������� ����� ; � ������ ������ mov dword [save_point_nt],ebp pop ecx xor eax,eax jmp .exit align 4 @@: pop ecx add ebp,304 dec ecx jnz .start_loop ; loop .start_loop or eax,-1 ;;;;;;;; �������� - ��� ������������� ������ ����������� � ������ �����. align 4 .exit: mov dword [esp+28],eax popad ret align 4 get_font: ; ����� � ������� ������ ��� ���������� �c����� �������� ������ ; esp+4 = dd width font shl 16 +hight font ; esp+0 = dd back ;pop eax ; pop dword [font_x_y] ;push eax pushad mov eax,dword [esp+32+4] mov dword [font_x_y],eax xor eax,eax mov dword [number_function],eax mov dword [index_start_block],eax ;������� � ����� ��� ������ ������ mov dword [flags_],eax ;������� ������� ��� ������ ������ mov dword [read_block],8 ;������� ���� ������ ��� ����� 8 ���� mov dword [buffer_read_d],file_buffer ; ��������� �� ����� ���� ����� �������� ������ mov eax,dword [alloc_memory_point] lea edi,dword [eax+4] mov dword [offset_to_string],edi mov eax,70 mov ebx,dword struct_f_info mcall ;;;;;;;;;;;;;;;; �������� ������ ��������� mov eax,ebx mov eax,dword [file_buffer] mov ebx,dword [type_fnt] cmp eax,ebx mov ecx,dword [file_buffer.font_size] mov edx,dword [font_x_y] cmp ecx,edx mov ecx, 4096;dword [ebp+32] ;������ ����� �� 4294967296 ���� �.�. 4 �� mov dword [read_block],ecx mov eax,68 mov ebx,12 mcall mov dword [font_array_point],eax ;save point to array mov dword [buffer_read_d],eax ;load font mov ebx,dword struct_f_info mov eax,70 mcall test eax,eax jnz .exit lea eax,[buffer_read_d] mov eax,dword [eax] mov ebx,dword [eax+8] add eax,ebx ; add eax,dword [eax+8] ; add eax,dword [buffer_read_d] mov dword [font_array_data],eax xor eax,eax jmp .ok ;here error file system align 4 .exit: or eax,-1 align 4 .ok: mov dword [esp+28],eax ;������ ������ popad ret 4 ; ����� ����� �������� �� ��������� �������������� ������� ������ ; esp+12= dd x shl 16 + y x- ���������� �� �, y - ���������� �� Y ; esp+8 = dd point to color of background and font ; esp+4 = dd point to ASCIIZ ; esp+0 = dd back align 4 font_draw_on_string: pushad mov esi,dword [esp+4+32] ;ASCIIZ mov edx,dword [esp+12+32] ; x shl 16 +y mov ecx,dword [font_x_y] ;������ ����� x shl 16 +y mov edi,dword [esp+8+32] ;��������� �� ������� �� ����� � ���� xor ebp,ebp ;�� 65 ������� )) cld align 4 @@: ;pushad xor eax,eax lodsb test al,al jz .return shl eax,4 ;�������� �� 16 �.�. ��� ������ ����� mov ebx,dword [font_array_data] ; ��� ������������� ����� �������� add ebx,eax push esi mov esi,1 mov eax,65 mcall pop esi add edx,8 shl 16 ;��������� ������ ������ ������� = 8 ������ jmp @b align 4 .return: popad ret 12 align 4 ; esp+4 = dd point to color of background and font show_all_glif: pushad mov edx,10 shl 16+20 ;dword [esp+12+32] ; x shl 16 +y mov ecx,128 shl 16 +256;dword [font_x_y] ;������ ����� x shl 16 +y mov edi,dword [esp+4+32] ;��������� �� ������� �� ����� � ���� xor ebp,ebp ;�� 65 ������� )) align 4 @@: mov ebx,dword [font_array_data] ; ��� ������������� ����� �������� mov esi,1 mov eax,65 mcall popad ret 4 align 4 free_fulder_info: ;���������� ������ ��������� ��� ��������� ������ ���� pushad mov ecx, dword [fulder_array_point] mov eax,68 mov ebx,13 mcall test eax,eax ; jnz @f mov dword [esp+28],eax ;������ ������ ;align 4 ;@@: popad ret align 4 free_font: ;���������� ������ ��������� ��� ��������� ������ ���� pushad mov ecx, dword [font_array_point] mov eax,68 mov ebx,13 mcall test eax,eax ; jnz @f mov dword [esp+28],eax ;������ ������ ;align 4 ;@@: popad ret align 4 ; alloc mem get 4 Kb for own data alloc_mem: pushad mov eax, dword [alloc_memory_point] test eax,eax jnz .mem_allocating mov eax,68 mov ebx,12 mov ecx,4096 mcall mov dword [alloc_memory_point],eax ; ��� ������ ��������� �������� 4 �� ��� � ��������� ��������� mov dword [eax],-1 popad ret align 4 .mem_allocating: mov ebp, dword [eax] mov eax,ebp cmp eax, -1 jnz .mem_allocating mov eax,68 mov ebx,12 mov ecx,4096 mcall mov dword [ebp],eax ; ��� ������ ��������� �������� 4 �� ��� � ��������� ��������� mov dword [ebp],-1 popad ret align 16 EXPORTS: dd sz_initialization_font, initialization_font dd sz_get_font, get_font dd sz_free_fulder_info, free_fulder_info dd sz_free_font, free_font dd sz_font_draw_on_string, font_draw_on_string dd sz_show_all_glif, show_all_glif ; dd szVersion_ch, 0x00000001 ; dd sz_option_box_draw, option_box_draw ; dd sz_option_box_mouse, option_box_mouse dd szVersion_fn, 0x00000001 dd 0,0 sz_initialization_font db 'initialization_font',0 sz_get_font db 'get_font',0 sz_free_fulder_info db 'free_fulder_info',0 sz_free_font db 'free_font',0 sz_font_draw_on_string db 'font_draw_on_string',0 sz_show_all_glif db 'show_all_glif',0 ;sz_check_box_mouse db 'check_box_mouse',0 ;szVersion_ch db 'version_ch',0 ;sz_option_box_draw db 'option_box_draw',0 ;sz_option_box_mouse db 'option_box_mouse',0 szVersion_fn db 'version_fn',0 ;;;;;;;;;;; ;;Data ;;;;;;;;;;; align 4 ;buffer_font file 'font_8x16.fon' ;����� ������� ����� �������� raw ������ 1bpp save_ecx dd 0x0 ;buffer_font file 'font01.ksf' ;����� ������� ����� �������� raw ������ 1bpp alloc_memory_point dd 0x0 ; point to mem block in RAM 4096-4 ;��������� ����� � ������ ���������� ����� ����������� ��������� �� ������ ��������� ���� � 4096-4, ���� ��� ���� ���������, �� dd -1 font_x_y dd 0x0 fulder_array_point dd 0x0 font_array_point dd 0x0 font_array_data dd 0x0 ; �������� ������ �.�. ������� ������ save_ebp dd 0x0 save_point_nt dd 0x0 name_fulder db '/sys/FONTS',0 name_fuld_end= ($-name_fulder) -1 name_font db '.ksf',0 type_fnt db 'kf01' align 16 struct_f_info: number_function dd 0x0 index_start_block dd 0x0 flags_ dd 0x0 read_block dd 0x0 buffer_read_d dd buffer_32 free_byte db 0x0 offset_to_string dd name_fulder align 16 file_buffer: .type_fnt dd 0x0 .font_size dd 0x0 align 16 buffer_32: .head dd ? .quantity_block dd ? .quantity_files dd ? rb 20