Subversion Repositories Kolibri OS

Rev

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

  1. .ppm:
  2.         stdcall img.create, [width], [height], Image.bpp24
  3.         test    eax, eax
  4.         jz      .quit
  5.         mov     [retvalue], eax
  6.         mov     ebx, eax
  7.  
  8.         mov     edi, [ebx + Image.Data]
  9.         mov     ecx, [ebx + Image.Width]
  10.         imul    ecx, [ebx + Image.Height]
  11.  
  12.         cmp     [data_type], PNM_ASCII
  13.         je      .ppm.ascii
  14.  
  15.   .ppm.raw:
  16.         cmp     [maxval], 0xff
  17.         jne     .ppm.raw.scale
  18.     @@:
  19.         lodsw
  20.         xchg    al, ah
  21.         movsb
  22.         stosw
  23.         dec     ecx
  24.         jnz     @b
  25.         jmp     .quit
  26.   .ppm.raw.scale:
  27.         mov     edx, [maxval]
  28.         xor     eax, eax
  29.     @@:
  30.         lodsb
  31.         mov     ebx, eax
  32.         shl     eax, 8
  33.         sub     eax, ebx
  34.         div     dl
  35.         stosb
  36.         lodsb
  37.         mov     ebx, eax
  38.         shl     eax, 8
  39.         sub     eax, ebx
  40.         div     dl
  41.         stosb
  42.         lodsb
  43.         mov     ebx, eax
  44.         shl     eax, 8
  45.         sub     eax, ebx
  46.         div     dl
  47.         stosb
  48.         dec     ecx
  49.         jnz     @b
  50.         jmp     .quit
  51.  
  52.   .ppm.ascii:
  53.         xor     eax, eax
  54.         cmp     [maxval], 0xff
  55.         jne     .ppm.ascii.scale
  56.   .ppm.ascii.next_char:
  57.     @@:
  58.         lodsb
  59.         cmp     al, ' '
  60.         jna     @b
  61.         call    pnm._.get_number
  62.         mov     [edi + 2], bl
  63.     @@:
  64.         lodsb
  65.         cmp     al, ' '
  66.         jna     @b
  67.         call    pnm._.get_number
  68.         mov     [edi + 1], bl
  69.     @@:
  70.         lodsb
  71.         cmp     al, ' '
  72.         jna     @b
  73.         call    pnm._.get_number
  74.         mov     [edi + 0], bl
  75.         add     edi, 3
  76.         dec     ecx
  77.         jnz     .ppm.ascii.next_char
  78.         jmp     .quit
  79.  
  80.   .ppm.ascii.scale:
  81.         mov     edx, [maxval]
  82.   .ppm.ascii.scale.next_char:
  83.     @@:
  84.         lodsb
  85.         cmp     al, ' '
  86.         jna     @b
  87.         call    pnm._.get_number
  88.         mov     eax, ebx
  89.         shl     eax, 8
  90.         sub     eax, ebx
  91.         div     dl
  92.         mov     [edi + 2], al
  93.     @@:
  94.         lodsb
  95.         cmp     al, ' '
  96.         jna     @b
  97.         call    pnm._.get_number
  98.         mov     eax, ebx
  99.         shl     eax, 8
  100.         sub     eax, ebx
  101.         div     dl
  102.         mov     [edi + 1], al
  103.     @@:
  104.         lodsb
  105.         cmp     al, ' '
  106.         jna     @b
  107.         call    pnm._.get_number
  108.         mov     eax, ebx
  109.         shl     eax, 8
  110.         sub     eax, ebx
  111.         div     dl
  112.         mov     [edi + 0], al
  113.         add     edi, 3
  114.         dec     ecx
  115.         jnz     .ppm.ascii.next_char
  116.         jmp     .quit
  117.  
  118.