Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2010-2015. All rights reserved.    ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;  VNC client for KolibriOS                                       ;;
  7. ;;                                                                 ;;
  8. ;;  Written by hidnplayr@kolibrios.org                             ;;
  9. ;;                                                                 ;;
  10. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  11. ;;             Version 2, June 1991                                ;;
  12. ;;                                                                 ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15. pixel_to_24bpp:         ; returns in ecx, destroys eax, ebx
  16. if BITS_PER_PIXEL = 8
  17. ; Convert pixel to 24BPP
  18.         mov     bl, 85
  19.         mov     al, [esi]
  20.         shr     al, 6
  21.         and     al, 3
  22.         mul     bl
  23.         mov     ch, al          ; blue
  24.         mov     bl, 36
  25.         mov     al, [esi]
  26.         shr     al, 3
  27.         and     al, 7
  28.         mul     bl
  29.         mov     cl, al          ; green
  30.         mov     al, [esi]
  31.         and     al, 7
  32.         mul     bl
  33.         shr     ecx, 8
  34.         mov     cl, al          ; red
  35.         inc     esi
  36. else if BITS_PER_PIXEL = 16
  37.         lodsw
  38.         mov     cl, al
  39.         shl     cl, 3
  40.         and     cx, 0x00f8      ; blue
  41.         shl     ecx, 16
  42.         mov     cx, ax
  43.         shl     cx, 5
  44.         and     ch, 0xfc        ; green
  45.         mov     cl, ah
  46.         and     al, 0xf8        ; red
  47. else
  48.         xor     ecx, ecx
  49.         mov     cx, [esi]
  50.         shr     ecx, 8
  51.         mov     cl, [esi+2]
  52.         add     esi, 3
  53. end if
  54.  
  55.         ret
  56.  
  57. encoding_RRE:
  58.  
  59.         DEBUGF  2,"RRE\n"
  60.  
  61.   @@:
  62.         lea     eax, [esi+5]
  63.         cmp     [datapointer], eax
  64.         jae     @f
  65.         call    read_data.more
  66.         jmp     @b
  67.   @@:
  68.  
  69.         lodsd
  70.         bswap   eax
  71.         mov     [subrectangles], eax
  72.  
  73.         call    pixel_to_24bpp
  74.  
  75.         movzx   eax, [screen.width]
  76.         mul     [rectangle.y]                           ; [screen.width]*[rectangle.y]
  77.         add     eax, [rectangle.x]                      ; [screen.width]*[rectangle.y]+[rectangle.x]
  78.         lea     edi, [framebuffer_data+eax*3]           ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
  79.  
  80.         movzx   eax, [screen.width]
  81.         sub     eax, [rectangle.width]
  82.         lea     ebp, [eax*3]                            ; ebp = ([screen.width]-[rectangle.width])*3
  83.  
  84.         push    edi
  85.         mov     eax, ecx
  86.         mov     edx, [rectangle.height]
  87.   .lineloop:
  88.         mov     ecx, [rectangle.width]
  89.   .pixelloop:
  90.         stosw
  91.         rol     eax, 16
  92.         stosb
  93.         rol     eax, 16
  94.         dec     ecx
  95.         jnz     .pixelloop
  96.         add     edi, ebp
  97.         dec     edx
  98.         jnz     .lineloop
  99.         pop     edi
  100.  
  101.   .subrectangle:
  102.   @@:
  103.         lea     eax, [esi+9]
  104.         cmp     [datapointer], eax
  105.         jae     @f
  106.         call    read_data.more
  107.         jmp     @b
  108.   @@:
  109.  
  110.         call    pixel_to_24bpp
  111.  
  112.         xor     eax, eax
  113.         lodsw
  114.         xchg    al, ah
  115.         mov     [subrectangle.x], eax
  116.         lodsw
  117.         xchg    al, ah
  118.         mov     [subrectangle.y], eax
  119.         lodsw
  120.         xchg    al, ah
  121.         mov     [subrectangle.height], eax
  122.         lodsw
  123.         xchg    al, ah
  124.         mov     [subrectangle.width], eax
  125.  
  126.         push    edi
  127.         mov     eax, [rectangle.width]
  128.         mul     [subrectangle.y]
  129.         add     eax, [subrectangle.x]
  130.         add     edi, eax
  131.  
  132.         mov     eax, ecx
  133.         mov     edx, [subrectangle.height]
  134.   .lineloop2:
  135.         mov     ecx, [subrectangle.width]
  136.   .pixelloop2:
  137.         stosw
  138.         rol     eax, 16
  139.         stosb
  140.         rol     eax, 16
  141.         dec     ecx
  142.         jnz     .pixelloop2
  143.         add     edi, ebp
  144.         dec     edx
  145.         jnz     .lineloop2
  146.  
  147.         pop     edi
  148.  
  149.         dec     [subrectangles]
  150.         jnz     .subrectangle
  151.         jmp     next_rectangle