Subversion Repositories Kolibri OS

Rev

Rev 1569 | Rev 1580 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1569 Rev 1572
Line 16... Line 16...
16
;; If not, see .                                                    ;;
16
;; If not, see .                                                    ;;
17
;;                                                                                                ;;
17
;;                                                                                                ;;
18
;;================================================================================================;;
18
;;================================================================================================;;
Line 19... Line 19...
19
 
19
 
20
include 'pcx.inc'
20
include 'pcx.inc'
Line 21... Line 21...
21
;include '../../../../system/board/trunk/debug.inc'
21
include '../../../../system/board/trunk/debug.inc'
22
 
22
 
23
;;================================================================================================;;
23
;;================================================================================================;;
24
proc img.is.pcx _data, _length ;//////////////////////////////////////////////////////////////////;;
24
proc img.is.pcx _data, _length ;//////////////////////////////////////////////////////////////////;;
Line 40... Line 40...
40
     jne    .is_not_pcx
40
     jne    .is_not_pcx
41
    cmp     [edi+pcx_header.version],  5
41
    cmp     [edi+pcx_header.version],  5
42
     jne    .is_not_pcx
42
     jne    .is_not_pcx
43
    cmp     [edi+pcx_header.encoding],  1
43
    cmp     [edi+pcx_header.encoding],  1
44
     jne    .is_not_pcx
44
     jne    .is_not_pcx
45
;    cmp     [esi+pcx_header.reserved],  1
45
    cmp     [esi+pcx_header.reserved],  0
46
;     jne    .is_not_pcx
46
     jne    .is_not_pcx
Line 47... Line 47...
47
 
47
 
48
    add     edi,    pcx_header.filler
48
    add     edi,    pcx_header.filler
49
    xor     al,     al
49
    xor     al,     al
50
    mov     ecx,    58
50
    mov     ecx,    58
51
    cld
51
    cld
52
    repe    scasb
52
    repe    scasb
53
    test    ecx,    ecx
53
    test    ecx,    ecx
Line 54... Line 54...
54
     jnz    .is_not_pcx
54
     jnz    .is_not_pcx
55
 
-
 
56
.is_pcx:
-
 
57
;pusha
-
 
58
;dps 'is_pcx'
-
 
59
;newline
55
 
60
;popa
-
 
61
    inc     eax
-
 
Line 62... Line 56...
62
    pop     edi ecx
56
.is_pcx:
63
    ret
-
 
64
 
-
 
65
.is_not_pcx:
-
 
66
;pusha
-
 
67
;dps 'is_not_pcx'
57
    inc     eax
68
;newline
58
 
Line 69... Line 59...
69
;popa
59
.is_not_pcx:
Line 91... Line 81...
91
xsize               rw      1
81
xsize               rw      1
92
ysize               rw      1
82
ysize               rw      1
93
stxsize             rw      1
83
stxsize             rw      1
94
stysize             rw      1
84
stysize             rw      1
95
total_bpl           rd      1
85
total_bpl           rd      1
-
 
86
total_bpl_tmp       rd      1
96
line_begin          rd      1
87
line_begin          rd      1
97
retvalue            rd      1
88
retvalue            rd      1
Line 98... Line 89...
98
 
89
 
Line 99... Line 90...
99
endl
90
endl
Line 100... Line 91...
100
 
91
 
Line -... Line 92...
-
 
92
    pusha
-
 
93
 
-
 
94
    mov     esi,    [_data]
-
 
95
 
-
 
96
    cmp     [esi+pcx_header.bpp],   1
-
 
97
     jz     monochrome
-
 
98
    cmp     byte[esi+pcx_header.nplanes],   3
-
 
99
     jnz    indexed
101
    pusha
100
 
102
 
101
 
103
    mov     esi,    [_data]
102
 
104
 
103
  _24bit:
105
    xor     eax,   eax
104
    xor     eax,   eax
Line 194... Line 193...
194
 
193
 
195
  .quit:
194
  .quit:
196
    popa
195
    popa
197
    mov     eax,    [retvalue]
196
    mov     eax,    [retvalue]
-
 
197
    ret
-
 
198
 
-
 
199
  indexed:
-
 
200
 
-
 
201
    xor     eax,   eax
-
 
202
    mov     al,    byte[esi+pcx_header.nplanes]
-
 
203
    mov     [nplanes],  eax
-
 
204
    mul     word[esi+pcx_header.bpl]
-
 
205
    mov     [total_bpl],    eax
-
 
206
 
-
 
207
    movzx   eax,    word[esi+pcx_header.xmax]
-
 
208
    inc     ax
-
 
209
    sub     ax,     word[esi+pcx_header.xmin]
-
 
210
    mov     [xsize],    ax
-
 
211
 
-
 
212
    movzx   ebx,    word[esi+pcx_header.ymax]
-
 
213
    inc     bx
-
 
214
    sub     bx,     word[esi+pcx_header.ymin]
-
 
215
    mov     [ysize],    bx
-
 
216
 
-
 
217
      stdcall   img.create, eax, ebx, Image.bpp8
-
 
218
    mov     [retvalue], eax
-
 
219
    test    eax,    eax
-
 
220
     jz     .quit
-
 
221
 
-
 
222
    mov     esi,    [_data]
-
 
223
    add     esi,    [_length]
-
 
224
    sub     esi,    768
-
 
225
    mov     edi,    [eax+Image.Palette]
-
 
226
    mov     ecx,    256
-
 
227
  @@:
-
 
228
    mov     ebx,    [esi]
-
 
229
    and     ebx,    0x00ffffff
-
 
230
    bswap   ebx
-
 
231
    shr     ebx,    8
-
 
232
    mov     [edi],  ebx
-
 
233
    add     edi,    4
-
 
234
    add     esi,    3
-
 
235
    dec     ecx
-
 
236
     jnz    @b
-
 
237
 
-
 
238
    movzx   ebx,    [xsize]
-
 
239
    movzx   ecx,    [ysize]
-
 
240
    mov     edx,    [eax+Image.Data]
-
 
241
 
-
 
242
    rol     ebx,    16
-
 
243
    or      ebx,    ecx
-
 
244
    xor     ebx,    [edx]
-
 
245
    mov     [eax+Image.Checksum],   ebx
-
 
246
 
-
 
247
 
-
 
248
    mov     esi,    [_data]
-
 
249
    add     esi,    128
-
 
250
    mov     edi,    [retvalue]
-
 
251
    mov     edi,    [edi+Image.Data]
-
 
252
 
-
 
253
  .begin:
-
 
254
    mov     eax,    [_data]
-
 
255
    mov     ax,     word[eax+pcx_header.bpl]
-
 
256
  .decode:
-
 
257
    mov     dl,     byte[esi]
-
 
258
    inc     esi
-
 
259
    mov     [buf],  dl
-
 
260
    and     dl,     0xC0
-
 
261
    cmp     dl,     0xC0
-
 
262
     jne    @f
-
 
263
    mov     dl,     [buf]
-
 
264
    and     dl,     0x3F
-
 
265
    mov     dh,     [esi]
-
 
266
    inc     esi
-
 
267
 
-
 
268
  .write_sequence:
-
 
269
    mov     [edi], dh
-
 
270
    inc     edi
-
 
271
    dec     ax
-
 
272
    dec     dl
-
 
273
     jnz    .write_sequence
-
 
274
 
-
 
275
    test    ax,     ax
-
 
276
     jz     .end_line
-
 
277
     jmp    .decode
-
 
278
  @@:
-
 
279
    mov     dl,     byte[buf]
-
 
280
    mov     [edi],  dl
-
 
281
    inc     edi
-
 
282
    dec     ax
-
 
283
     jz     .end_line
-
 
284
     jmp    .decode
-
 
285
 
-
 
286
  .end_line:
-
 
287
    dec     word[ysize]
-
 
288
     jz     .quit
-
 
289
     jmp    .begin
-
 
290
 
-
 
291
  .quit:
-
 
292
    popa
-
 
293
    mov     eax,    [retvalue]
-
 
294
    ret
-
 
295
 
-
 
296
 
-
 
297
  monochrome:
-
 
298
 
-
 
299
    xor     eax,    eax
-
 
300
    mov     ax,     word[esi+pcx_header.bpl]
-
 
301
    mov     [total_bpl],    eax
-
 
302
 
-
 
303
    movzx   eax,    word[esi+pcx_header.xmax]
-
 
304
    inc     ax
-
 
305
    sub     ax,     word[esi+pcx_header.xmin]
-
 
306
    mov     [xsize],    ax
-
 
307
 
-
 
308
    movzx   ebx,    word[esi+pcx_header.ymax]
-
 
309
    inc     bx
-
 
310
    sub     bx,     word[esi+pcx_header.ymin]
-
 
311
    mov     [ysize],    bx
-
 
312
 
-
 
313
      stdcall   img.create, eax, ebx, Image.bpp8
-
 
314
    mov     [retvalue], eax
-
 
315
    test    eax,    eax
-
 
316
     jz     .quit
-
 
317
 
-
 
318
    mov     edi,    [eax+Image.Palette]
-
 
319
    mov     [edi],  dword   0x00000000
-
 
320
    mov     [edi+4],    dword   0x00ffffff
-
 
321
 
-
 
322
    movzx   ebx,    [xsize]
-
 
323
    movzx   ecx,    [ysize]
-
 
324
    mov     edx,    [eax+Image.Data]
-
 
325
 
-
 
326
    rol     ebx,    16
-
 
327
    or      ebx,    ecx
-
 
328
    xor     ebx,    [edx]
-
 
329
    mov     [eax+Image.Checksum],   ebx
-
 
330
 
-
 
331
 
-
 
332
    mov     esi,    [_data]
-
 
333
    add     esi,    128
-
 
334
    mov     edi,    [retvalue]
-
 
335
    mov     edi,    [edi+Image.Data]
-
 
336
 
-
 
337
  .begin:
-
 
338
    mov     eax,    [total_bpl]
-
 
339
    mov     [total_bpl_tmp],    eax
-
 
340
    mov     ax,     [xsize]
-
 
341
 
-
 
342
  .decode:
-
 
343
 
-
 
344
    mov     dh,     byte[esi]
-
 
345
    inc     esi
-
 
346
    mov     [buf],  dh
-
 
347
    and     dh,     0xC0
-
 
348
    cmp     dh,     0xC0
-
 
349
     je    .cycle1
-
 
350
    mov     dh,     1
-
 
351
    mov     dl,     [buf]
-
 
352
     jmp    .exit1
-
 
353
  .cycle1:
-
 
354
    mov     dh,     [buf]
-
 
355
    and     dh,     0x3F
-
 
356
    mov     dl,     byte[esi]
-
 
357
    inc     esi
-
 
358
  .exit1:
-
 
359
    push    eax
-
 
360
    xor     eax,    eax
-
 
361
    mov     al,     dh
-
 
362
    sub     [total_bpl_tmp],    eax
-
 
363
    pop     eax
-
 
364
 
-
 
365
 
-
 
366
  .write_sequence:
-
 
367
    mov     ecx,    7
-
 
368
  .go:
-
 
369
    bt      edx,    ecx
-
 
370
     jnc    @f
-
 
371
    mov     [edi],  byte    0x01
-
 
372
     jmp    .later
-
 
373
  @@:
-
 
374
    mov     [edi],  byte    0x00
-
 
375
  .later:
-
 
376
    inc     edi
-
 
377
    dec     ax
-
 
378
     jnz    .lol
-
 
379
  @@:
-
 
380
    cmp     [total_bpl_tmp],    0
-
 
381
     jng    @f
-
 
382
 
-
 
383
    mov     dh,     byte[esi]
-
 
384
    inc     esi
-
 
385
    mov     [buf],  dh
-
 
386
    and     dh,     0xC0
-
 
387
    cmp     dh,     0xC0
-
 
388
     je    .cycle2
-
 
389
    mov     dh,     1
-
 
390
    mov     dl,     [buf]
-
 
391
     jmp    .exit2
-
 
392
  .cycle2:
-
 
393
    mov     dh,     [buf]
-
 
394
    and     dh,     0x3F
-
 
395
    mov     dl,     byte[esi]
-
 
396
    inc     esi
-
 
397
  .exit2:
-
 
398
    push    eax
-
 
399
    xor     eax,    eax
-
 
400
    mov     al,     dh
-
 
401
    sub     [total_bpl_tmp],    eax
-
 
402
    pop     eax
-
 
403
 
-
 
404
     jmp    @b
-
 
405
  @@:
-
 
406
    dec     word[ysize]
-
 
407
     jnz    .begin
-
 
408
     jmp    .quit
-
 
409
  .lol:
-
 
410
    dec     ecx
-
 
411
    cmp     ecx,    -1
-
 
412
     jne    .go
-
 
413
    dec     dh
-
 
414
     jnz    .write_sequence
-
 
415
     jmp    .decode
-
 
416
 
-
 
417
  .quit:
-
 
418
    popa
-
 
419
    mov     eax,    [retvalue]
-
 
420
    ret
198
    ret
421
 
Line -... Line 422...
-
 
422
endp
-
 
423
 
199
endp
424
 
200
 
425
 
201
;;================================================================================================;;
426
;;================================================================================================;;
202
proc img.encode.pcx _img, _p_length, _options ;///////////////////////////////////////////////////;;
427
proc img.encode.pcx _img, _p_length, _options ;///////////////////////////////////////////////////;;
203
;;------------------------------------------------------------------------------------------------;;
428
;;------------------------------------------------------------------------------------------------;;