Subversion Repositories Kolibri OS

Rev

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

  1. fontname equ 'font8x16.bmp'
  2. virtual at 0
  3. file fontname, 3Eh
  4. ; sanity check
  5. load a1 word from 0
  6. load a2 dword from 0xE
  7. if (a1 <> 'BM') | (a2 <> 0x28)
  8. error 'not BMP file!'
  9. end if
  10. load a1 dword from 0x12
  11. load a2 dword from 0x16
  12. if (a1 and 0xF) | (a2 and 0xF) | (a1 > 16*16)
  13. error 'font: invalid width or height'
  14. end if
  15. font_width = a1 shr 4
  16. font_bmp_scanline = (font_width*2 + 3) and not 3
  17. font_height = a2 shr 4
  18. load a1 dword from 0x1A
  19. if a1 <> 0x10001
  20. error 'font: not monochrome bitmap'
  21. end if
  22. end virtual
  23.  
  24. font:
  25. repeat font_height
  26. cur_scan = %
  27.         repeat 256
  28.                 virtual at 0
  29.                 a2 = (font_width+14) shr 3
  30.                 if cur_scan=1 & %=0x10
  31.                 a2 = (font_width+7) shr 3
  32.                 end if
  33.                 file fontname:3Eh + font_bmp_scanline*(font_height*(16-((%-1) shr 4))-cur_scan) + ((((%-1) and 0xF)*font_width) shr 3), a2
  34.                 dd 0
  35.                 load a1 dword from 0
  36.                 a1 = ((a1 and 0x55555555) shl 1) or ((a1 and 0xAAAAAAAA) shr 1)
  37.                 a1 = ((a1 and 0x33333333) shl 2) or ((a1 and 0xCCCCCCCC) shr 2)
  38.                 a1 = ((a1 and 0x0F0F0F0F) shl 4) or ((a1 and 0xF0F0F0F0) shr 4)
  39.                 end virtual
  40.                 a1 = (a1 shr (((%-1)*font_width) and 7)) and ((1 shl font_width) - 1)
  41.                 a1 = a1 xor ((1 shl font_width) - 1)
  42.                 if font_width > 8
  43.                 dw      a1
  44.                 else
  45.                 db      a1
  46.                 end if
  47.         end repeat
  48. end repeat
  49.