Subversion Repositories Kolibri OS

Rev

Rev 1158 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; Copyright (c) 2009, <Lrz>
  2. ; All rights reserved.
  3. ;
  4. ; Redistribution and use in source and binary forms, with or without
  5. ; modification, are permitted provided that the following conditions are met:
  6. ;       * Redistributions of source code must retain the above copyright
  7. ;       notice, this list of conditions and the following disclaimer.
  8. ;       * Redistributions in binary form must reproduce the above copyright
  9. ;       notice, this list of conditions and the following disclaimer in the
  10. ;       documentation and/or other materials provided with the distribution.
  11. ;       * Neither the name of the <organization> nor the
  12. ;       names of its contributors may be used to endorse or promote products
  13. ;       derived from this software without specific prior written permission.
  14. ;
  15. ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov nickname <Lrz> ''AS IS'' AND ANY
  16. ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  17. ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  18. ; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
  19. ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  20. ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  21. ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  22. ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  23. ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  24. ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25. ;*****************************************************************************
  26.  
  27. ;Fonts library
  28. ;  
  29. ;;;;;;;;;;;;;;;;;;
  30.  
  31. format MS COFF
  32.  
  33. public EXPORTS
  34.  
  35. section '.flat' code readable align 16
  36. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  37. ;Get info about
  38. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  39. include '../../../../macros.inc'
  40. align 4
  41. initialization_font:
  42. ; esp+0 = dd back
  43. ; çàïîëíÿåì ìàññèâ - ñòðóêòó äëÿ ïîëó÷åíèÿ êîë-âà ôàéëîâ
  44.  
  45. pushad
  46.         xor     eax,eax
  47.         inc     eax
  48.         mov     [number_function],eax
  49. ;structure is completed
  50.         mov     eax,70
  51.         mov     ebx,dword struct_f_info
  52.         mcall
  53. ;IF ERROR FT then exit      
  54.         test    eax,eax
  55.         jnz     .exit
  56. ;IF ERROR folder is not found then exit
  57.         test    ebx,ebx
  58.         mov     eax,ebx
  59.         jnz     .exit
  60.  
  61. ;Get quantity files
  62.         mov     eax,[buffer_32.quantity_files]
  63.         imul    eax,304
  64.         add     eax,32          ; ??
  65.         push    eax         ;save eax â eax ðàçìåð íóæíîé íàì ïàìÿòè â áàéòàõ
  66. ;init memory
  67.         mov     eax,68
  68.         mov     ebx,11
  69.         mcall
  70.         test    eax,eax
  71.         jz     .exit
  72.         inc     ebx     ;âûäåëèòü áëîê â ecx áàéò
  73.  
  74.         pop     ecx
  75.         mov     eax,68
  76.         mcall
  77.         mov     dword [fulder_array_point],eax  ;save point for memory's fulder
  78. ;â eax óêàçàòåëü íà áëîê
  79.         mov     [buffer_read_d],eax             ;point to new array
  80.         mov     eax,[buffer_32.quantity_files]
  81.         mov     [read_block],eax
  82. ;get in buffer info of files and sub dir current dir
  83.         mov     eax,70
  84.         mov     ebx,dword struct_f_info
  85.         mcall
  86. ;ïîëó÷èëè èíôîðìàöèþ î ôàéëàõ.
  87.         mov     ebp, dword [buffer_read_d] ;point to structure
  88.         mov     ecx, dword [ebp+4]         ;êîë-âî áëîêîâ ÁÄÂÊ
  89.         mov     dword [save_ecx],ecx
  90.         add     ebp, 32 ;ñìåùàåìñÿ äî ÁÄÂÊ
  91.         mov     dword [save_ebp],ebp
  92.         cld     ;óñòàíîâêà ôëàãà íàïðàâëåíèÿ
  93. align 4
  94. .start_loop:
  95.         push    ecx
  96.         lea     edi,[ebp+0x28] ;â edi óêàçàòåëü íà íà÷àëî èìåíè.
  97.         xor     eax,eax
  98.         mov     ecx,263
  99.         repne    scasb   ;íàéäåì êîíåö ñòðîêè
  100. ;;;;;;;;;;;;;;;;;;;;;;;
  101. .next_a:
  102.         sub     edi,5   ;.ksf,0
  103.         mov     esi,dword name_font
  104.         mov     ecx,name_font_e-name_font
  105.         repe    cmpsb
  106.         jnz     @f
  107. ;;;;;;;; óðà ýòî íàø ôàéë ò.å. íàø øðèôò ìû íàøëè íóæíûé ôàéëèê ))
  108. ;òåïåðü íóæíî òî÷íî óáåäèòüñÿ ÷òî ýòî íàø è òîëüêî íàø ôàéëèê
  109. ;çàãðóçèì çàãîëîâîê ôàéëà è óçíàåì åãî ðàçìåð ãëèôà.
  110.         call    alloc_mem       ; âûäåëèì îçó ñâîèõ ïåðåìåííûõ
  111. ; ñåé÷àñ íàì íóæíî ñôîðìèðîâàòü èìÿ ôàéëà ñ ïîëíûì ïóòåì        
  112.         mov     eax,dword [alloc_memory_point]
  113.         lea     edi,dword [eax+4]
  114.         lea     esi,[name_fulder]
  115.         mov     ecx,name_fuld_end
  116.         rep     movsb   ;ïåðåíîñèì ïóòü
  117.         mov     al,'/'
  118.         stosb
  119.         lea     esi,[ebp+0x28] ;â esi óêàçàòåëü íà íà÷àëî èìåíè.
  120. align 4
  121. .loop_b:
  122.         lodsb
  123.         stosb
  124.         test    al,al
  125.         jnz     .loop_b
  126.  
  127. ;        mov     edi,name_of_file ; [ebp+0x28] ;â edi óêàçàòåëü íà íà÷àëî èìåíè.      
  128. ;get in buffer info above own file
  129.         xor     eax,eax
  130.         mov     dword [number_function],eax
  131.         mov     dword [index_start_block],eax   ;ïîçèöèÿ â ôàéëå äëÿ ÷òåíèÿ äàííûõ
  132.         mov     dword [flags_],eax              ;ñòàðøàÿ ïîçèöèÿ äëÿ ÷òåíèÿ äàííûõ
  133.         mov     dword [read_block],8            ;ñêîëüêî áàéò ÷èòàòü íàì íóæíî 8 áàéò
  134.         mov     dword [buffer_read_d],file_buffer ; óêàçàòåëü íà áóôåð êóäà áóäóò çàïèñàíû äàííûå
  135.  
  136.         mov     eax,dword [alloc_memory_point]
  137.         lea     edi,dword [eax+4]
  138.         mov     dword [offset_to_string],edi
  139.  
  140.         mov     eax,70
  141.         mov     ebx,dword struct_f_info
  142.         mcall
  143. ;;;;;;;;;;;;;;;; ïðîâåðèì ôîðìàò çàãîëîâêà
  144.         mov     eax,ebx
  145.         mov     eax,dword [file_buffer]
  146.         mov     ebx,dword [type_fnt]
  147.         cmp     eax,ebx
  148.         jnz     @f
  149.  
  150. ;;;;;;; îòëè÷íî ñåé÷àñ ïðîâåðèëè ÷òî çàãîëîâîê èìåííî òîò êîòîðûé íàì íóæåí
  151. ; ñåé÷àñ íóæíî ïåðåðàñïðåäåëèòü áëîêè ò.å. ïî ìåðå íàõîæäåíèÿ áóäåì ïåðåíîñèòü áëîêè
  152. ; â íà÷àëî áóôåðà
  153.  
  154.         mov     dword [save_point_nt],ebp
  155.         pop     ecx
  156.         mov     dword [esp+28],0
  157.         popad
  158.         ret
  159.  
  160.  
  161. align 4
  162. @@:     pop     ecx
  163.         add     ebp,304
  164.         dec     ecx
  165.         jnz     .start_loop
  166. ;        loop    .start_loop
  167. ;        xor     eax,eax
  168. ;;;;;;;; ïðîøëèñü - âñå èíòåðåñóùþùèå øðèôòû ïåðåìåñòèëè â íà÷àëî áëîêà.
  169.  
  170. align 4
  171. .exit:  mov     dword [esp+28],eax
  172. popad
  173. ret
  174.  
  175.  
  176. align 4
  177. get_font:
  178. ; ïîèñê â ìàññèâå øðèôòà ïðè ñîâïàäåíèè ócëîâèé çàãðóçêà øðèôòà
  179. ; esp+4 = dd width font shl 16 +hight font
  180. ; esp+0 = dd back
  181. ;pop     eax
  182. ;        pop     dword [font_x_y]
  183. ;push    eax
  184. pushad
  185.         mov     eax,dword [esp+32+4]
  186.         mov     dword [font_x_y],eax
  187.         xor     eax,eax
  188.         mov     dword [number_function],eax
  189.         mov     dword [index_start_block],eax   ;ïîçèöèÿ â ôàéëå äëÿ ÷òåíèÿ äàííûõ
  190.         mov     dword [flags_],eax              ;ñòàðøàÿ ïîçèöèÿ äëÿ ÷òåíèÿ äàííûõ
  191.         mov     dword [read_block],8            ;ñêîëüêî áàéò ÷èòàòü íàì íóæíî 8 áàéò
  192.         mov     dword [buffer_read_d],file_buffer ; óêàçàòåëü íà áóôåð êóäà áóäóò çàïèñàíû äàííûå
  193.  
  194.         mov     eax,dword [alloc_memory_point]
  195.         lea     edi,dword [eax+4]
  196.         mov     dword [offset_to_string],edi
  197.  
  198.  
  199.         mov     eax,70
  200.         mov     ebx,dword struct_f_info
  201.         mcall
  202. ;;;;;;;;;;;;;;;; ïðîâåðèì ôîðìàò çàãîëîâêà
  203.         mov     eax,ebx
  204.         mov     eax,dword [file_buffer]
  205.         mov     ebx,dword [type_fnt]
  206.         cmp     eax,ebx
  207.  
  208.         mov     ecx,dword [file_buffer.font_size]
  209.         mov     edx,dword [font_x_y]
  210.         cmp     ecx,edx
  211.  
  212.         mov     ecx, 4096;dword [ebp+32]     ;ðàçìåð ôàéëà äî 4294967296 áàéò ò.å. 4 Ãá
  213.  
  214.         mov     dword [read_block],ecx
  215.         mov     eax,68
  216.         mov     ebx,12
  217.         mcall
  218.  
  219.         mov     dword [font_array_point],eax    ;save point to array
  220.         mov     dword [buffer_read_d],eax
  221.  
  222. ;load font
  223.         mov     ebx,dword struct_f_info
  224.         mov     eax,70
  225.         mcall
  226.         test    eax,eax
  227.         jnz     @f
  228.  
  229.         lea     eax,[buffer_read_d]
  230.         mov     eax,dword [eax]
  231.         mov     ebx,dword [eax+8]
  232.         add     eax,ebx
  233. ;        add     eax,dword [eax+8]
  234. ;        add     eax,dword [buffer_read_d]
  235.         mov     dword [font_array_data],eax
  236.         mov     dword [esp+28],0
  237. ;        pop     ecx
  238. popad
  239. ret 4
  240.  
  241. ;here error file system
  242. align 4
  243. @@:
  244.         or      dword [esp+28],-1       ;âåðíåì îøèáêó
  245.         popad
  246.         ret 4
  247.  
  248.  
  249. ; ïîèñê âûâîä ñòîðî÷êè ïî ñèìâîëüíî ñôîðèðîâàííîãî øðèôòîì òåêñòà
  250. ; esp+12= dd x shl 16 + y x- êîîðäèíàòà ïî Õ, y - êîîðäèíàòà ïî Y
  251. ; esp+8 = dd point to color of background and font
  252. ; esp+4 = dd point to ASCIIZ
  253. ; esp+0 = dd back
  254. align 4
  255. font_draw_on_string:
  256. pushad
  257.  
  258.         mov     esi,dword [esp+4+32] ;ASCIIZ
  259.         mov     edx,dword [esp+12+32]  ; x shl 16 +y
  260.         mov     ecx,dword [font_x_y]  ;ðàçìåð ãëèôà x shl 16 +y
  261.         mov     edi,dword [esp+8+32]     ;óêàçàòåëü íà ïàëèòðó èç öâåòà è ôîíà
  262.         xor     ebp,ebp         ;ñì 65 ôóíêöèþ ))
  263.         cld
  264. align 4
  265. @@:     ;pushad
  266.         xor     eax,eax
  267.         lodsb
  268.         test    al,al
  269.         jz      .return
  270.         shl     eax,4         ;óìíîæàåì íà 16 ò.ê. ýòî âûñîòà ãëèôà
  271.  
  272.         mov     ebx,dword [font_array_data]    ; òóò ðàñïîëîãàþòñÿ ãëèôû ñèìâîëîâ
  273.         add     ebx,eax
  274.         push    esi
  275.         mov     esi,1
  276.         mov     eax,65
  277.         mcall
  278.         pop     esi
  279.         add     edx,8 shl 16    ;ñëåäóþùèé ñèìâîë øèðèíà ñèìâîëà = 8 òî÷êàì
  280.         jmp     @b
  281.  
  282. align 4
  283. .return:
  284. popad
  285. ret 12
  286.  
  287.  
  288. align 4
  289. ; esp+4 = dd point to color of background and font
  290. show_all_glif:
  291. pushad
  292.  
  293.         mov     edx,10 shl 16+20 ;dword [esp+12+32]  ; x shl 16 +y
  294.         mov     ecx,128 shl 16 +256;dword [font_x_y]  ;ðàçìåð ãëèôà x shl 16 +y
  295.         mov     edi,dword [esp+4+32]     ;óêàçàòåëü íà ïàëèòðó èç öâåòà è ôîíà
  296.         xor     ebp,ebp         ;ñì 65 ôóíêöèþ ))
  297.  
  298. align 4
  299. @@:    
  300.         mov     ebx,dword [font_array_data]    ; òóò ðàñïîëîãàþòñÿ ãëèôû ñèìâîëîâ
  301.         mov     esi,1
  302.         mov     eax,65
  303.         mcall
  304. popad
  305. ret 4
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312. align 4
  313. free_fulder_info:
  314. ;îñâîáîäèòü ïàìÿòü âûäåëåíóþ äëÿ ïîëó÷åíèÿ áëîêîâ ÁÄÂÊ
  315. pushad
  316.         mov     ecx, dword [fulder_array_point]
  317.         mov     eax,68
  318.         mov     ebx,13
  319.         mcall
  320.         test    eax,eax
  321.         jnz     @f
  322.         or      dword [esp+28],-1       ;âåðíåì îøèáêó
  323. align 4
  324. @@:
  325. popad
  326.         ret
  327. align 4
  328. free_font:
  329. ;îñâîáîäèòü ïàìÿòü âûäåëåíóþ äëÿ ïîëó÷åíèÿ áëîêîâ ÁÄÂÊ
  330. pushad
  331.         mov     ecx, dword [font_array_point]
  332.         mov     eax,68
  333.         mov     ebx,13
  334.         mcall
  335.         test    eax,eax
  336.         jnz     @f
  337.         or      dword [esp+28],-1       ;âåðíåì îøèáêó
  338. align 4
  339. @@:
  340. popad
  341.         ret
  342.  
  343. align 4
  344. ; alloc mem get 4 Kb for own data
  345. alloc_mem:
  346.         pushad
  347.         mov     eax, dword [alloc_memory_point]
  348.         test    eax,eax
  349.         jnz     .mem_allocating
  350.         mov     eax,68
  351.         mov     ebx,12
  352.         mov     ecx,4096
  353.         mcall
  354.         mov     dword [alloc_memory_point],eax  ; ïðè ïåðâîì âõîæäåíèè âûäåëÿåì 4 êá ÎÇÓ è ñîõðàíÿåì óêàçàòåëü
  355.         mov     dword [eax],-1
  356.         popad
  357.         ret
  358. align 4
  359. .mem_allocating:
  360.         mov     ebp, dword [eax]
  361.         mov     eax,ebp
  362.         cmp     eax, -1
  363.         jnz     .mem_allocating
  364.  
  365.         mov     eax,68
  366.         mov     ebx,12
  367.         mov     ecx,4096
  368.         mcall
  369.         mov     dword [ebp],eax ; ïðè ïåðâîì âõîæäåíèè âûäåëÿåì 4 êá ÎÇÓ è ñîõðàíÿåì óêàçàòåëü
  370.         mov     dword [ebp],-1
  371.         popad
  372.         ret
  373.  
  374. align 16
  375. EXPORTS:
  376.  
  377.         dd      sz_initialization_font, initialization_font
  378.         dd      sz_get_font,            get_font
  379.         dd      sz_free_fulder_info,    free_fulder_info
  380.         dd      sz_free_font,           free_font
  381.         dd      sz_font_draw_on_string, font_draw_on_string
  382.         dd      sz_show_all_glif,       show_all_glif
  383. ;        dd      szVersion_ch,           0x00000001
  384. ;        dd      sz_option_box_draw,     option_box_draw
  385. ;        dd      sz_option_box_mouse,    option_box_mouse
  386.         dd      szVersion_fn,           0x00000001
  387.         dd      0,0
  388.  
  389. sz_initialization_font db 'initialization_font',0
  390. sz_get_font            db 'get_font',0
  391. sz_free_fulder_info    db 'free_fulder_info',0
  392. sz_free_font           db 'free_font',0
  393. sz_font_draw_on_string db 'font_draw_on_string',0
  394. sz_show_all_glif       db 'show_all_glif',0
  395. ;sz_check_box_mouse     db 'check_box_mouse',0
  396. ;szVersion_ch           db 'version_ch',0
  397. ;sz_option_box_draw     db 'option_box_draw',0
  398. ;sz_option_box_mouse    db 'option_box_mouse',0
  399. szVersion_fn           db 'version_fn',0
  400.  
  401. ;;;;;;;;;;;
  402. ;;Data
  403. ;;;;;;;;;;;
  404. align 4
  405. ;buffer_font file 'font_8x16.fon' ;øðèôò êîòîðûì áóäåì âûâîäèòü raw ôîðìàò 1bpp
  406. save_ecx        dd      0x0
  407. ;buffer_font file 'font01.ksf' ;øðèôò êîòîðûì áóäåì âûâîäèòü raw ôîðìàò 1bpp
  408. alloc_memory_point      dd      0x0     ; point to mem block in RAM 4096-4
  409. ;ñòðóêòóðà òàêàÿ â íà÷àëå âûäåëåíîãî áëîêà ðàçìåùàåòñÿ óêàçàòåëü íà äðóãîé âûäåëëíûé áëîê â 4096-4, åñëè ýòî áëîê ïîñëåäíèé, òî dd -1
  410. font_x_y          dd 0x0
  411. fulder_array_point dd 0x0
  412. font_array_point  dd 0x0
  413. font_array_data   dd 0x0        ; ðåàëüíûå äàííûå ò.å. ìàòðèöà øðèôòà
  414. save_ebp          dd 0x0
  415. save_point_nt     dd 0x0
  416. name_fulder       db '/sys/FONTS',0
  417. name_fuld_end=     ($-name_fulder) -1
  418. name_font         db '.ksf'
  419. name_font_e:
  420. type_fnt          db 'kf01'
  421. type_fnt_e:
  422.  
  423.  
  424.  
  425. align 16
  426. struct_f_info:
  427. number_function   dd 0x0
  428. index_start_block dd 0x0
  429. flags_            dd 0x0
  430. read_block        dd 0x0
  431. buffer_read_d     dd buffer_32
  432. free_byte         db 0x0
  433. offset_to_string  dd name_fulder
  434.  
  435. align 16
  436. file_buffer:
  437. .type_fnt       dd 0x0
  438. .font_size      dd 0x0
  439.  
  440. align 16
  441. buffer_32:
  442. .head             dd ?
  443. .quantity_block   dd ?
  444. .quantity_files   dd ?
  445.                   rb 20
  446.