Subversion Repositories Kolibri OS

Rev

Rev 1167 | 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. ;;;;;;;;;;;;;;;;;;
  28.  
  29. format MS COFF
  30.  
  31. public EXPORTS
  32.  
  33. section '.flat' code readable align 16
  34. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  35. ;Get info about
  36. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  37. include '../../../../macros.inc'
  38. align 4
  39. initialization_font:
  40. ; esp+0 = dd back
  41. ; çàïîëíÿåì ìàññèâ - ñòðóêòó äëÿ ïîëó÷åíèÿ êîë-âà ôàéëîâ
  42.  
  43. pushad
  44.         xor     eax,eax
  45.         inc     eax
  46.         mov     [number_function],eax
  47. ;structure is completed
  48.         mov     eax,70
  49.         mov     ebx,dword struct_f_info
  50.         mcall
  51. ;IF ERROR FT then exit      
  52.         test    eax,eax
  53.         jnz     .exit
  54. ;IF ERROR folder is not found then exit
  55.         test    ebx,ebx
  56.         mov     eax,ebx
  57.         jnz     .exit
  58.  
  59. ;Get quantity files
  60.         mov     eax,[buffer_32.quantity_files]
  61.         imul    eax,304
  62.         add     eax,32          ; ??
  63.         push    eax         ;save eax â eax ðàçìåð íóæíîé íàì ïàìÿòè â áàéòàõ
  64. ;init memory
  65.         mov     eax,68
  66.         mov     ebx,11
  67.         mcall
  68.         test    eax,eax
  69.         jz     .exit
  70.         inc     ebx     ;âûäåëèòü áëîê â ecx áàéò
  71.  
  72.         pop     ecx
  73.         mov     eax,68
  74.         mcall
  75.         mov     dword [fulder_array_point],eax  ;save point for memory's fulder
  76. ;â eax óêàçàòåëü íà áëîê
  77.         mov     [buffer_read_d],eax             ;point to new array
  78.         mov     eax,[buffer_32.quantity_files]
  79.         mov     [read_block],eax
  80. ;get in buffer info of files and sub dir current dir
  81.         mov     eax,70
  82.         mov     ebx,dword struct_f_info
  83.         mcall
  84. ;ïîëó÷èëè èíôîðìàöèþ î ôàéëàõ.
  85.         mov     ebp, dword [buffer_read_d] ;point to structure
  86.         mov     ecx, dword [ebp+4]         ;êîë-âî áëîêîâ ÁÄÂÊ
  87.         mov     dword [save_ecx],ecx
  88.         add     ebp, 32 ;ñìåùàåìñÿ äî ÁÄÂÊ
  89.         mov     dword [save_ebp],ebp
  90.         cld     ;óñòàíîâêà ôëàãà íàïðàâëåíèÿ
  91. align 4
  92. .start_loop:
  93.         push    ecx
  94.         lea     edi,[ebp+0x28] ;â edi óêàçàòåëü íà íà÷àëî èìåíè.
  95.         xor     eax,eax
  96.         mov     ecx,263
  97.         repne    scasb   ;íàéäåì êîíåö ñòðîêè
  98. ;;;;;;;;;;;;;;;;;;;;;;;
  99.         sub     edi,5   ;.ksf,0
  100.         lea     esi,[name_font]
  101.         mov     eax,dword[edi]
  102.         or      eax,0x20202000  ; ñäåëàåì ðàñøèðåíèå ñòðî÷íûìè áóêâàìè.
  103.         cmp     eax,dword[esi]
  104.         jnz     @f
  105.  
  106. ;;;;;;;; óðà ýòî íàø ôàéë ò.å. íàø øðèôò ìû íàøëè íóæíûé ôàéëèê ))
  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.         xor     eax,eax
  157.         jmp     .exit
  158.  
  159. align 4
  160. @@:     pop     ecx
  161.         add     ebp,304
  162.         dec     ecx
  163.         jnz     .start_loop
  164. ;        loop    .start_loop
  165.         or     eax,-1
  166. ;;;;;;;; ïðîøëèñü - âñå èíòåðåñóùþùèå øðèôòû ïåðåìåñòèëè â íà÷àëî áëîêà.
  167.  
  168. align 4
  169. .exit:  mov     dword [esp+28],eax
  170. popad
  171. ret
  172.  
  173.  
  174. align 4
  175. get_font:
  176. ; ïîèñê â ìàññèâå øðèôòà ïðè ñîâïàäåíèè ócëîâèé çàãðóçêà øðèôòà
  177. ; esp+4 = dd width font shl 16 +hight font
  178. ; esp+0 = dd back
  179. ;pop     eax
  180. ;        pop     dword [font_x_y]
  181. ;push    eax
  182. pushad
  183.         mov     eax,dword [esp+32+4]
  184.         mov     dword [font_x_y],eax
  185.         xor     eax,eax
  186.         mov     dword [number_function],eax
  187.         mov     dword [index_start_block],eax   ;ïîçèöèÿ â ôàéëå äëÿ ÷òåíèÿ äàííûõ
  188.         mov     dword [flags_],eax              ;ñòàðøàÿ ïîçèöèÿ äëÿ ÷òåíèÿ äàííûõ
  189.         mov     dword [read_block],8            ;ñêîëüêî áàéò ÷èòàòü íàì íóæíî 8 áàéò
  190.         mov     dword [buffer_read_d],file_buffer ; óêàçàòåëü íà áóôåð êóäà áóäóò çàïèñàíû äàííûå
  191.  
  192.         mov     eax,dword [alloc_memory_point]
  193.         lea     edi,dword [eax+4]
  194.         mov     dword [offset_to_string],edi
  195.  
  196.  
  197.         mov     eax,70
  198.         mov     ebx,dword struct_f_info
  199.         mcall
  200. ;;;;;;;;;;;;;;;; ïðîâåðèì ôîðìàò çàãîëîâêà
  201.         mov     eax,ebx
  202.         mov     eax,dword [file_buffer]
  203.         mov     ebx,dword [type_fnt]
  204.         cmp     eax,ebx
  205.  
  206.         mov     ecx,dword [file_buffer.font_size]
  207.         mov     edx,dword [font_x_y]
  208.         cmp     ecx,edx
  209.  
  210.         mov     ecx, 4096;dword [ebp+32]     ;ðàçìåð ôàéëà äî 4294967296 áàéò ò.å. 4 Ãá
  211.  
  212.         mov     dword [read_block],ecx
  213.         mov     eax,68
  214.         mov     ebx,12
  215.         mcall
  216.  
  217.         mov     dword [font_array_point],eax    ;save point to array
  218.         mov     dword [buffer_read_d],eax
  219.  
  220. ;load font
  221.         mov     ebx,dword struct_f_info
  222.         mov     eax,70
  223.         mcall
  224.         test    eax,eax
  225.         jnz     .exit
  226.  
  227.         lea     eax,[buffer_read_d]
  228.         mov     eax,dword [eax]
  229.         mov     ebx,dword [eax+8]
  230.         add     eax,ebx
  231. ;        add     eax,dword [eax+8]
  232. ;        add     eax,dword [buffer_read_d]
  233.         mov     dword [font_array_data],eax
  234.         xor     eax,eax
  235.         jmp     .ok
  236.  
  237. ;here error file system
  238. align 4
  239. .exit:
  240.         or      eax,-1
  241. align 4
  242. .ok:    mov     dword [esp+28],eax       ;âåðíåì îøèáêó
  243.         popad
  244.         ret 4
  245.  
  246.  
  247. ; ïîèñê âûâîä ñòîðî÷êè ïî ñèìâîëüíî ñôîðèðîâàííîãî øðèôòîì òåêñòà
  248. ; esp+12= dd x shl 16 + y x- êîîðäèíàòà ïî Õ, y - êîîðäèíàòà ïî Y
  249. ; esp+8 = dd point to color of background and font
  250. ; esp+4 = dd point to ASCIIZ
  251. ; esp+0 = dd back
  252. align 4
  253. font_draw_on_string:
  254. pushad
  255.  
  256.         mov     esi,dword [esp+4+32] ;ASCIIZ
  257.         mov     edx,dword [esp+12+32]  ; x shl 16 +y
  258.         mov     ecx,dword [font_x_y]  ;ðàçìåð ãëèôà x shl 16 +y
  259.         mov     edi,dword [esp+8+32]     ;óêàçàòåëü íà ïàëèòðó èç öâåòà è ôîíà
  260.         xor     ebp,ebp         ;ñì 65 ôóíêöèþ ))
  261.         cld
  262. align 4
  263. @@:     ;pushad
  264.         xor     eax,eax
  265.         lodsb
  266.         test    al,al
  267.         jz      .return
  268.         shl     eax,4         ;óìíîæàåì íà 16 ò.ê. ýòî âûñîòà ãëèôà
  269.  
  270.         mov     ebx,dword [font_array_data]    ; òóò ðàñïîëîãàþòñÿ ãëèôû ñèìâîëîâ
  271.         add     ebx,eax
  272.         push    esi
  273.         mov     esi,1
  274.         mov     eax,65
  275.         mcall
  276.         pop     esi
  277.         add     edx,8 shl 16    ;ñëåäóþùèé ñèìâîë øèðèíà ñèìâîëà = 8 òî÷êàì
  278.         jmp     @b
  279.  
  280. align 4
  281. .return:
  282. popad
  283. ret 12
  284.  
  285.  
  286. align 4
  287. ; esp+4 = dd point to color of background and font
  288. show_all_glif:
  289. pushad
  290.  
  291.         mov     edx,10 shl 16+20 ;dword [esp+12+32]  ; x shl 16 +y
  292.         mov     ecx,128 shl 16 +256;dword [font_x_y]  ;ðàçìåð ãëèôà x shl 16 +y
  293.         mov     edi,dword [esp+4+32]     ;óêàçàòåëü íà ïàëèòðó èç öâåòà è ôîíà
  294.         xor     ebp,ebp         ;ñì 65 ôóíêöèþ ))
  295.  
  296. align 4
  297. @@:    
  298.         mov     ebx,dword [font_array_data]    ; òóò ðàñïîëîãàþòñÿ ãëèôû ñèìâîëîâ
  299.         mov     esi,1
  300.         mov     eax,65
  301.         mcall
  302. popad
  303. ret 4
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310. align 4
  311. free_fulder_info:
  312. ;îñâîáîäèòü ïàìÿòü âûäåëåíóþ äëÿ ïîëó÷åíèÿ áëîêîâ ÁÄÂÊ
  313. pushad
  314.         mov     ecx, dword [fulder_array_point]
  315.         mov     eax,68
  316.         mov     ebx,13
  317.         mcall
  318.         test    eax,eax
  319. ;        jnz     @f
  320.         mov      dword [esp+28],eax       ;âåðíåì îøèáêó
  321. ;align 4
  322. ;@@:
  323. popad
  324.         ret
  325. align 4
  326. free_font:
  327. ;îñâîáîäèòü ïàìÿòü âûäåëåíóþ äëÿ ïîëó÷åíèÿ áëîêîâ ÁÄÂÊ
  328. pushad
  329.         mov     ecx, dword [font_array_point]
  330.         mov     eax,68
  331.         mov     ebx,13
  332.         mcall
  333.         test    eax,eax
  334. ;        jnz     @f
  335.         mov      dword [esp+28],eax       ;âåðíåì îøèáêó
  336. ;align 4
  337. ;@@:
  338. popad
  339.         ret
  340.  
  341. align 4
  342. ; alloc mem get 4 Kb for own data
  343. alloc_mem:
  344.         pushad
  345.         mov     eax, dword [alloc_memory_point]
  346.         test    eax,eax
  347.         jnz     .mem_allocating
  348.         mov     eax,68
  349.         mov     ebx,12
  350.         mov     ecx,4096
  351.         mcall
  352.         mov     dword [alloc_memory_point],eax  ; ïðè ïåðâîì âõîæäåíèè âûäåëÿåì 4 êá ÎÇÓ è ñîõðàíÿåì óêàçàòåëü
  353.         mov     dword [eax],-1
  354.         popad
  355.         ret
  356. align 4
  357. .mem_allocating:
  358.         mov     ebp, dword [eax]
  359.         mov     eax,ebp
  360.         cmp     eax, -1
  361.         jnz     .mem_allocating
  362.  
  363.         mov     eax,68
  364.         mov     ebx,12
  365.         mov     ecx,4096
  366.         mcall
  367.         mov     dword [ebp],eax ; ïðè ïåðâîì âõîæäåíèè âûäåëÿåì 4 êá ÎÇÓ è ñîõðàíÿåì óêàçàòåëü
  368.         mov     dword [ebp],-1
  369.         popad
  370.         ret
  371.  
  372. align 16
  373. EXPORTS:
  374.  
  375.         dd      sz_initialization_font, initialization_font
  376.         dd      sz_get_font,            get_font
  377.         dd      sz_free_fulder_info,    free_fulder_info
  378.         dd      sz_free_font,           free_font
  379.         dd      sz_font_draw_on_string, font_draw_on_string
  380.         dd      sz_show_all_glif,       show_all_glif
  381. ;        dd      szVersion_ch,           0x00000001
  382. ;        dd      sz_option_box_draw,     option_box_draw
  383. ;        dd      sz_option_box_mouse,    option_box_mouse
  384.         dd      szVersion_fn,           0x00000001
  385.         dd      0,0
  386.  
  387. sz_initialization_font db 'initialization_font',0
  388. sz_get_font            db 'get_font',0
  389. sz_free_fulder_info    db 'free_fulder_info',0
  390. sz_free_font           db 'free_font',0
  391. sz_font_draw_on_string db 'font_draw_on_string',0
  392. sz_show_all_glif       db 'show_all_glif',0
  393. ;sz_check_box_mouse     db 'check_box_mouse',0
  394. ;szVersion_ch           db 'version_ch',0
  395. ;sz_option_box_draw     db 'option_box_draw',0
  396. ;sz_option_box_mouse    db 'option_box_mouse',0
  397. szVersion_fn           db 'version_fn',0
  398.  
  399. ;;;;;;;;;;;
  400. ;;Data
  401. ;;;;;;;;;;;
  402. align 4
  403. ;buffer_font file 'font_8x16.fon' ;øðèôò êîòîðûì áóäåì âûâîäèòü raw ôîðìàò 1bpp
  404. save_ecx        dd      0x0
  405. ;buffer_font file 'font01.ksf' ;øðèôò êîòîðûì áóäåì âûâîäèòü raw ôîðìàò 1bpp
  406. alloc_memory_point      dd      0x0     ; point to mem block in RAM 4096-4
  407. ;ñòðóêòóðà òàêàÿ â íà÷àëå âûäåëåíîãî áëîêà ðàçìåùàåòñÿ óêàçàòåëü íà äðóãîé âûäåëëíûé áëîê â 4096-4, åñëè ýòî áëîê ïîñëåäíèé, òî dd -1
  408. font_x_y          dd 0x0
  409. fulder_array_point dd 0x0
  410. font_array_point  dd 0x0
  411. font_array_data   dd 0x0        ; ðåàëüíûå äàííûå ò.å. ìàòðèöà øðèôòà
  412. save_ebp          dd 0x0
  413. save_point_nt     dd 0x0
  414. name_fulder       db '/sys/FONTS',0
  415. name_fuld_end=     ($-name_fulder) -1
  416. name_font         db '.ksf',0
  417. type_fnt          db 'kf01'
  418.  
  419.  
  420.  
  421. align 16
  422. struct_f_info:
  423. number_function   dd 0x0
  424. index_start_block dd 0x0
  425. flags_            dd 0x0
  426. read_block        dd 0x0
  427. buffer_read_d     dd buffer_32
  428. free_byte         db 0x0
  429. offset_to_string  dd name_fulder
  430.  
  431. align 16
  432. file_buffer:
  433. .type_fnt       dd 0x0
  434. .font_size      dd 0x0
  435.  
  436. align 16
  437. buffer_32:
  438. .head             dd ?
  439. .quantity_block   dd ?
  440. .quantity_files   dd ?
  441.                   rb 20
  442.