Subversion Repositories Kolibri OS

Rev

Rev 547 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;    IMGVIEW.ASM
  2. ;
  3. ;    This program displays jpeg images. The window can be resized.
  4. ;
  5. ;    Version 0.0    END OF 2003
  6. ;                   Octavio Vega
  7. ;    Version 0.1    7th March 2004
  8. ;                   Mike Hibbett ( very small part! )
  9. ;    Version 0.11   7th April 2004
  10. ;                   Ville Turjanmaa ( 'set_as_bgr' function )
  11. ;    Version 0.12   29th May 2004
  12. ;                   Ivan Poddubny (correct "set_as_bgr"+parameters+boot+...)
  13. ;    Version 0.12   30 de mayo 2004
  14. ;                   Octavio Vega
  15. ;                   bugs correction and slideshow
  16. ;    version 0.13   3 de junio 2004
  17. ;                   Octavio Vega
  18. ;                   unos retoques
  19. ;    version 0.14   10th August 2004
  20. ;                   Mike Hibbett Added setting default colours
  21. ;    version 0.15   24th August 2006
  22. ;                   diamond (rewritten to function 70)
  23. ;    version 0.16   19th May 2007
  24. ;                   Mario79
  25. ;                   1) correction for changed function 15,
  26. ;                   2) use monochrome background if free memory there are less than 2 MB
  27. ;                   3) use COL0 - COL9 boot parameter
  28. ;                   0=black,1=white,2=green,3=lilas,4=grey
  29. ;                   5=light-blue,6=blue,7=salad,8=pink,9=yellow
  30. ;    version 0.17   17th June 2007
  31. ;                   diamond (background definition now uses shared memory)
  32. ;    version 0.18   9th August 2007
  33. ;                   Mario79
  34. ;                   Open file with parameter in patch:
  35. ;                   Size of parameter - 4 bytes. Parameter starts with the character "\",
  36. ;                   the unused characters are filled by a blank (ASCII 20h).
  37. ;                   '\T  /hd0/1/1.jpg' - set background, mode: tile
  38. ;                   '\S  /hd0/1/1.jpg' - set background, mode: stretch
  39.                  
  40.                memsize=20000h
  41.                org 0
  42.  PARAMS     =    memsize - 1024
  43.  
  44. appname equ 'Jpegview '
  45. version equ '0.18'
  46.  
  47. use32
  48.  
  49.                db     'MENUET01'              ; 8 byte id
  50.                dd     0x01                    ; header version
  51.                dd     START                   ; start of code
  52.                dd     I_END                   ; size of image
  53.                dd     memsize                 ; memory for app
  54.                dd     memsize - 1024           ; esp
  55.                dd     PARAMS , 0x0               ; I_Param , I_Icon
  56.  
  57. stack_size=4096 + 1024
  58.  
  59. include '..\..\..\macros.inc'
  60.  
  61. START:                          ; start of execution
  62.         mcall   68,11           ; initialize heap
  63.  
  64.     cmp     [PARAMS], byte 0
  65.     jne     check_parameters
  66.  
  67.     ; Calculate the 'free' memory available
  68.     ; to the application, and create the malloc block from it
  69.   .l1:
  70.     mov     ecx,memsize-fin-stack_size
  71.     mov     edi,fin
  72.     call    add_mem
  73.  
  74.     call    colorprecalc ;inicializa tablas usadas para pasar de ybr a bgr
  75.     call    draw_window
  76.     call    read_string.rs_done
  77.  
  78. still:
  79.     push still
  80.     mov ebx,100                ;1 second
  81.     mov  eax,23                 ; wait here for event
  82.     mcall
  83.     cmp  eax,1                  ; redraw request ?
  84.     je   draw_window
  85.     cmp  eax,2                  ; key in buffer ?
  86.     je   read_string
  87.     cmp  eax,3                  ; button in buffer ?
  88.     je   button
  89.     jmp display_next
  90.  
  91. button:                       ; BUTTON
  92.     mov  eax,17
  93.     mcall
  94.     cmp ah,3
  95.     je set_as_bgr2
  96.     cmp ah,2
  97.     je slideshow
  98.     cmp  ah,1                   ; CLOSE PROGRAM
  99.     jne  close_program.exit
  100. close_program:
  101.     mov  eax,-1
  102.     mcall
  103.   .exit:
  104.     ret
  105.  
  106.    ; Put a 'chunk' of the image on the window
  107. put_image:
  108.     pushad
  109.  
  110.     lea ebp,[edx+eax+7]
  111.     cmp  [winxs],bp
  112.     jc     .l1
  113.     lea ebp,[ecx+ebx+20+2+17]
  114.     cmp [winys],bp
  115.     jc     .l1
  116.  
  117.     add     eax,2  ; offset for boarder
  118.     add     ebx,2 ; offset for title bar
  119.     push    ax ; pox
  120.     push    bx ; pos
  121.     push    cx ; size
  122.     push    dx ; size
  123.     pop     ecx
  124.     pop     edx
  125.     mov     ebx,edi
  126.     mov     eax,7
  127.  
  128.     mcall                         ; Put image function
  129. .l1:
  130.     popad
  131.     ret
  132.  
  133.  
  134.  
  135. ;******************************************************************************
  136.  
  137. check_parameters:
  138.     cmp     [PARAMS], dword "BOOT" ; received BOOT parameter -> goto handler
  139.     je      boot_set_background
  140.     cmp     [PARAMS], word "CO"
  141.     jne     @f
  142.     cmp     [PARAMS+2], byte "L"
  143.     je      boot_set_background    
  144. @@:
  145.     cmp     byte [PARAMS], "\"
  146.     jne     @f
  147.     cmp     [PARAMS+1], byte "S"
  148.     jne     .tile
  149.     mov     [drawing_mode],2
  150.     jmp     @f
  151. .tile:
  152.     cmp     [PARAMS+1], byte "T"
  153.     jne     @f
  154.     mov     [drawing_mode],1
  155. @@:
  156.     cmp     byte [PARAMS], 1
  157.     jz      ipc_service
  158.     mov     edi, name_string       ; clear string with file name
  159.     mov     al,  0
  160.     mov     ecx, 100
  161.     rep     stosb
  162.  
  163.     mov     ecx, 100               ; calculate length of parameter string
  164.     mov     edi, PARAMS
  165.     repne   scasb
  166.    
  167.     sub     edi, PARAMS
  168.     mov     ecx, edi
  169.     mov     esi, PARAMS            ; copy parameters to file name
  170.     mov     edi, name_string
  171.     cmp     byte [PARAMS], "\"
  172.     jne     @f
  173.     add     esi,4
  174.     sub     ecx,4
  175. @@:
  176.     cld
  177.     rep     movsb
  178.  
  179.     cmp     byte [PARAMS], "\"
  180.     je      boot_set_background.1      
  181.    
  182.     jmp     START.l1       ; return to beggining of the progra
  183. ;******************************************************************************
  184. boot_set_background:
  185.     mov     [drawing_mode],2
  186. .1:
  187.     mcall 18,16
  188.     cmp   eax,1024*2
  189.     jb    set_mono
  190.     mov     ecx,memsize-fin-stack_size  ; size
  191.     mov     edi,fin                     ; pointer
  192.     call    add_mem             ; mark memory from fin to 0x100000-1024 as free
  193.     call    colorprecalc        ; calculate colors
  194.     mov     esi,name_string
  195.     call    open
  196.     test    eax,eax
  197.     jz      close_program
  198.     call    jpeg_info
  199.     mov dword [jpeg_st],ebp
  200.     call    set_as_bgr2         ; set wallpaper
  201.     jmp     close_program       ; close the program right now
  202.  
  203. ;******************************************************************************
  204. set_mono:
  205.     mov     eax, 15
  206.     mov     ebx, 1
  207.     mov     ecx, 1
  208.     mov     edx, 1
  209.     mcall
  210.  
  211.     cmp     [PARAMS], dword "BOOT" ; received BOOT parameter -> goto handler
  212.     jne     @f
  213. .green:
  214.     mov     ecx,mono+6
  215.     jmp     .set
  216. @@:
  217. ;    cmp     [PARAMS], word "CO" ; received BOOT parameter -> goto handler
  218. ;    jne     .green
  219.     xor     ecx,ecx
  220.     mov     cl,[PARAMS+3]
  221.     sub     cl,0x30
  222.     cmp     ecx,0
  223.     jb      .green
  224.     cmp     ecx,9    
  225.     ja      .green
  226.     imul    ecx,3
  227.     add     ecx,mono
  228. .set:
  229.     mcall   15,5, ,0,3
  230.  
  231.     ; Stretch the image to fit
  232.     mov     eax, 15
  233.     mov     ebx, 4
  234.     mov     ecx, 1
  235.     mcall
  236.  
  237.     mov     eax, 15
  238.     mov     ebx, 3
  239.     mcall
  240.     jmp     close_program
  241.    
  242. mono:
  243.     db 0,0,0       ; black
  244.     db 255,255,255 ; white
  245.     db 128,128,0   ; green
  246.     db 240,202,166 ; lilas
  247.     db 192,192,192 ; grey
  248.     db 255,255,0   ; light-blue
  249.     db 255,0,0     ; blue
  250.     db 192,220,192 ; salad
  251.     db 255,0,255   ; pink
  252.     db 0,255,255   ; yellow
  253. ;******************************************************************************
  254.  
  255. set_as_bgr2:
  256.     mov ebp,dword[jpeg_st]
  257.     test    ebp,ebp
  258.     jz      .end
  259.    
  260.     mov     eax, 15
  261.     mov     ebx, 1
  262.     mov     ecx, [ebp + x_size]
  263.     mov     edx, [ebp + y_size]
  264.     mcall
  265.  
  266.         mov     ebx, 6
  267.         mcall
  268.         test    eax, eax
  269.         jz      .end
  270.         mov     [ipc_mem_out], eax
  271.  
  272.     mov     dword [ebp+draw_ptr],put_chunk_to_mem
  273.     call    jpeg_display
  274.  
  275.         mov     eax, 15
  276.         mov     ebx, 7
  277.         mov     ecx, [ipc_mem_out]
  278.         mcall
  279.  
  280.     ; Stretch the image to fit
  281.     mov     eax, 15
  282.     mov     ebx, 4
  283.     mov     ecx, [drawing_mode]  ;2
  284.     mcall
  285.  
  286.     mov     eax, 15
  287.     mov     ebx, 3
  288.     mcall
  289.  
  290.  
  291.  .end:
  292.     ret
  293.  
  294. ;******************************************************************************
  295.  
  296. ipc_service:
  297.         mov     esi, PARAMS+1
  298.         xor     eax, eax
  299.         xor     ecx, ecx
  300. @@:
  301.         lodsb
  302.         test    al, al
  303.         jz      @f
  304.         lea     ecx, [ecx*5]
  305.         lea     ecx, [ecx*2+eax-'0']
  306.         jmp     @b
  307. @@:
  308.         add     ecx, 16
  309.         mov     edx, ecx
  310.         mcall   68, 12
  311.         test    eax, eax
  312.         jnz     @f
  313. .exit:
  314.         mcall   -1
  315. @@:
  316.         mov     ecx, eax
  317.         and     dword [ecx], 0
  318.         mov     dword [ecx+4], 8
  319.         mov     [ipc_mem], ecx
  320.         mcall   60, 1
  321.         mcall   40, 1 shl 6
  322.         mcall   23, 500         ; wait up to 5 seconds for IPC message
  323.         test    eax, eax
  324.         jz      .exit
  325. ; we got message with JPEG data, now decode it
  326.         mov     eax, [ecx+12]
  327.         mov     [ipc_mem_size], eax
  328. ; init JPEG decoder
  329.     mov     ecx,memsize-fin-stack_size  ; size
  330.     mov     edi,fin                     ; pointer
  331.     call    add_mem             ; mark memory from fin to 0x100000-1024 as free
  332.     call    colorprecalc        ; calculate colors
  333. ; hook file functions
  334.         mov     ecx, 4
  335.         call    malloc
  336.         and     dword [edi], 0
  337.         lea     eax, [edi-file_handler.position]
  338.         mov     byte [read], 0xE9
  339.         mov     dword [read+1], read_from_mem - (read+5)
  340. ; decode
  341.     call    jpeg_info
  342.     mov     dword [jpeg_st],ebp
  343.     test    ebp,ebp
  344.     jz      .end
  345.  
  346.         mov     eax, [ebp + x_size]
  347.         mul     dword [ebp + y_size]
  348.         lea     eax, [eax*3+8]
  349.         mov     ecx, eax
  350.         mcall   68, 12
  351.         test    eax, eax
  352.         jz      .end
  353.         add     eax, 8
  354.         mov     [ipc_mem_out], eax
  355.         mov     ebx, [ebp + x_size]
  356.         mov     [eax-8], ebx
  357.         mov     ebx, [ebp + y_size]
  358.         mov     [eax-4], ebx
  359.  
  360.     mov     dword [ebp+draw_ptr],put_chunk_to_mem
  361.     call    jpeg_display
  362.  
  363. ; IPC response
  364.         mov     esi, [ebp + x_size]
  365.         imul    esi, [ebp + y_size]
  366.         lea     esi, [esi*3+8]
  367.         mov     edx, [ipc_mem_out]
  368.         sub     edx, 8
  369. .response:
  370.         mov     ecx, [ipc_mem]
  371.         mov     ecx, [ecx+8]
  372.         mcall   60,2
  373.  
  374.     jmp     close_program       ; close the program right now
  375.  
  376. .end:
  377.         mov     esi, 8
  378.         mov     edx, x_pointer  ; points to 2 null dwords
  379.         jmp     .response
  380.  
  381. read_from_mem:
  382. ; in: eax=handle, ecx=size, edi=pointer to buffer
  383. ; out: ecx=number of read bytes, buffer filled
  384.         pushad
  385.         mov     esi, [ipc_mem]
  386.         add     esi, 16
  387.         add     esi, [eax+file_handler.position]
  388.         add     ecx, [eax+file_handler.position]
  389.         cmp     ecx, [ipc_mem_size]
  390.         jb      @f
  391.         mov     ecx, [ipc_mem_size]
  392. @@:
  393.         sub     ecx, [eax+file_handler.position]
  394.         add     [eax+file_handler.position], ecx
  395.         rep     movsb
  396.         popad
  397.         ret
  398.  
  399. ;******************************************************************************
  400.  
  401. put_chunk_to_mem:
  402. ; in: (eax,ebx) = start coordinates of chunk
  403. ;     (ecx,edx) = sizes of chunk
  404. ;     edi -> chunk data
  405.         push    esi edi edx
  406.         mov     esi, edi
  407.         mov     edi, ebx
  408.         imul    edi, [ebp + x_size]
  409.         add     edi, eax
  410.         lea     edi, [edi*3]
  411.         add     edi, [ipc_mem_out]
  412. @@:
  413.         push    ecx edi
  414.         lea     ecx, [ecx*3]
  415.         rep     movsb
  416.         pop     edi ecx
  417.         add     edi, [ebp + x_size]
  418.         add     edi, [ebp + x_size]
  419.         add     edi, [ebp + x_size]
  420.         dec     edx
  421.         jnz     @b
  422.         pop     edx edi esi
  423.         ret
  424.  
  425. ;******************************************************************************
  426.  
  427.  
  428.  
  429. ;   *********************************************
  430. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  431. ;   *********************************************
  432.  
  433.  
  434. draw_window:
  435.  
  436.     mov  eax,48
  437.     mov  ebx,3
  438.     mov  ecx,sc
  439.     mov  edx,sizeof.system_colors
  440.     mcall
  441.  
  442.     mov  eax,12
  443.     mov  ebx,1
  444.     mcall
  445.  
  446.     ; Draw the window to the appropriate size - it may have
  447.     ; been resized by the user
  448.     cmp     [winxs], 0
  449.     jne     dw_001
  450.  
  451.     ; Give the screen some inital defaults
  452.     mov     [winxs], 400
  453.     mov     [winys], 300
  454.     mov     ax, 100
  455.     mov     [winxo], ax
  456.     mov     [winyo], ax
  457.     jmp     dw_002
  458.  
  459. dw_001:
  460.     mov     eax, 9
  461.     mov ebx, memsize - 1024
  462.     mov ecx, -1
  463.     mcall
  464.     mov     eax, [ebx + 34]
  465.     mov     [winxo], ax
  466.     mov     eax, [ebx + 38]
  467.     mov     [winyo], ax
  468.     mov     eax, [ebx + 42]
  469.     mov     [winxs], ax
  470.     mov     eax, [ebx + 46]
  471.     mov     [winys], ax
  472.  
  473. dw_002:
  474.         mov     ebx, dword [winxo-2]
  475.         mov     bx, [winxs]
  476.         mov     ecx, dword [winyo-2]
  477.         mov     cx, [winys]
  478.  
  479.     xor  eax,eax                   ; DRAW WINDOW
  480.     mov  edx,[sc.work]
  481.     or   edx,0x33000000
  482.     mov  edi,title                ; WINDOW LABEL
  483.     mcall
  484.  
  485.  
  486.     mov  eax,8                     ; BUTTON 2: slideshow
  487.     mov  ebx,57
  488.     mov  cx, [winys]
  489.     sub  cx, 39
  490.     shl  ecx, 16
  491.     add  ecx, 12
  492.     mov  esi, [sc.work_button]
  493.     mov  edx,2
  494.     mcall
  495.  
  496.     mov  eax,4                     ; Button text
  497.     movzx ebx, word [winys]
  498.     add   ebx, 3 shl 16 - 36
  499.     mov  ecx,[sc.work_button_text]
  500.     mov  edx,setname
  501.     mov  esi,setnamelen-setname
  502.     mcall
  503.  
  504.  
  505.     mov  eax,8                     ; BUTTON 3: set as background
  506.     mov  bx, [winxs]
  507.     sub  bx, 65
  508.     shl  ebx, 16
  509.     mov  bx,55
  510.     mov  cx, [winys]
  511.     sub  cx, 39
  512.     shl  ecx, 16
  513.     add  ecx, 12
  514.     mov  esi, [sc.work_button]
  515.     mov  edx,3
  516.     mcall
  517.  
  518.     mov  eax,4                     ; Button text
  519.     movzx ebx, word [winxs]
  520.     sub   ebx, 63
  521.     shl   ebx,16
  522.     mov   bx, word [winys]
  523.     sub   bx,36
  524.     mov  ecx,[sc.work_button_text]
  525.     mov  edx,setbgr
  526.     mov  esi,setbgrlen-setbgr
  527.     mcall
  528.     call    print_strings
  529.     call    load_image
  530.     mov     eax,12                    ; function 12:tell os about windowdraw
  531.     mov     ebx,2                     ; 2, end of draw
  532.     mcall
  533.  
  534.     ret
  535.  
  536.  
  537.  
  538.     ; Read in the image file name.
  539. read_string:
  540.     movzx edi,byte[name_string.cursor]
  541.     add     edi,name_string
  542.     mov     eax,2
  543.     mcall                        ; Get the key value
  544.     shr     eax,8
  545.     cmp     eax,13                      ; Return key ends input
  546.     je      .rs_done
  547.     cmp     eax,8
  548.     jnz     .nobsl
  549.     cmp     edi,name_string
  550.     je      .exit
  551.     dec     edi
  552.     mov     [edi],byte 0;'_'
  553.     dec     byte[name_string.cursor]
  554.     jmp     print_strings
  555. .exit:   ret
  556. .nobsl:
  557.     cmp     eax,31
  558.     jbe     .exit
  559.     cmp     eax,97
  560.     jb      .keyok
  561.     sub     eax,32
  562. .keyok:
  563.     mov ah,0
  564.     stosw
  565.     cmp edi,name_string.end
  566.     jnc print_strings
  567.     inc byte[name_string.cursor]
  568.     jmp    print_strings
  569. .rs_done:
  570.     call   print_strings
  571.     mov     esi,name_string
  572.     call    open
  573.     test    eax,eax
  574.     jz      .exit
  575.     call    jpeg_info
  576.     test    ebp,ebp
  577.     jz      close
  578.     xchg    [jpeg_st],ebp
  579.     call jpeg_close
  580.  
  581. load_image:
  582.  
  583.     mov     eax,13              ; clear picture area
  584.     movzx    ebx, word [winxs]
  585.     add     ebx, 1  shl 16 -10
  586.     movzx    ecx, word [winys]
  587.     sub     ecx, 40
  588.     add     ecx, 1  shl 16
  589.  
  590.     mov     edx,[sc.work]
  591.     mcall
  592.     mov    ebp,[jpeg_st]
  593.     test    ebp,ebp
  594.     jz      .exit
  595.     mov     dword [ebp+draw_ptr],put_image
  596.     jmp    jpeg_display
  597.  .exit: ret
  598.  
  599. print_strings:
  600.     pusha
  601.     mov     eax,13              ; clear text area
  602.     movzx   ebx, word [winxs]
  603.     add     ebx, 59 shl 16 -125
  604.     mov     cx, [winys]
  605.     sub     cx, 39
  606.     shl     ecx, 16
  607.     add     ecx, 12
  608.     mov     edx,0xffffff
  609.     mcall
  610.  
  611.     mov     eax,4               ;
  612.     movzx   ebx, word [winys]
  613.     add     ebx, 61 shl 16 - 37
  614.     mov     ecx,0x000000
  615.     mov     edx,name_string
  616.     mov     esi,60
  617.     mcall
  618.     popa
  619.     ret
  620.  
  621. slideshow:
  622.         cmp     [file_dir], 0
  623.         jnz     .exit
  624.         cmp     [jpeg_st], 0
  625.         jz      .exit
  626.         mov     esi, name_string
  627.         movzx   ecx, byte [name_string.cursor]
  628. .l1:
  629.         cmp     byte [esi+ecx], '/'
  630.         jz      .l2
  631.         loop    .l1
  632. .exit:
  633.         ret
  634. .l2:
  635.         mov     byte [esi+ecx], 0
  636.         call    open
  637.         mov     byte [esi+ecx], '/'
  638.         test    eax, eax
  639.         jz      .exit
  640.         test    byte [fileattr], 0x10
  641.         jz      .exit
  642.         mov     [file_dir], eax
  643.         inc     ecx
  644.         mov     [name_string.cursor], cl
  645. display_next:
  646.         mov     ebx, [file_dir]
  647.         test    ebx, ebx
  648.         jnz     @f
  649.         ret
  650. @@:
  651.         mov     byte [ebx], 1
  652.         mov     byte [ebx+12], 1
  653.         mov     dword [ebx+16], dirinfo
  654.         mov     eax, 70
  655.         mcall
  656.         mov     eax, [file_dir]
  657.         inc     dword [eax+4]
  658.         cmp     ebx, 1
  659.         jz      @f
  660.         mov     eax, [file_dir]
  661.         and     [file_dir], 0
  662.         jmp     close
  663. @@:
  664.         movzx   edi, byte [name_string.cursor]
  665.         add     edi, name_string
  666.         lea     esi, [dirinfo+32+40]
  667. @@:
  668.         lodsb
  669.         stosb
  670.         test    al, al
  671.         jnz     @b
  672.         mov     ecx, name_string.end
  673.         sub     ecx, edi
  674.         rep     stosb
  675.     call   print_strings
  676.     mov     esi,name_string
  677.     call    open
  678.     test    eax,eax
  679.     jz      display_next
  680.     call    jpeg_info
  681.     test    ebp,ebp
  682.     jnz     .l6
  683.     call close
  684.     jmp display_next
  685.    .l6:
  686.     mov dword[ebp+draw_ptr],put_image
  687.     push ebp
  688.     xchg [jpeg_st],ebp
  689.     call jpeg_close
  690.     pop ebp
  691.     jmp jpeg_display
  692.  
  693.  
  694. include 'filelib.asm'
  695. include 'memlib.asm'
  696. include 'jpeglib.asm'
  697.  
  698.  
  699. ; DATA AREA
  700.  
  701. wcolor          dd  0x000000
  702. drawing_mode    dd  2
  703. title          db  appname,version,0
  704. setname          db  'SLIDESHOW'
  705. setnamelen:
  706.  
  707. setbgr           db  '   BGR  '
  708. setbgrlen:
  709.  
  710. x_pointer       dd  0
  711. x_offset        dd  0
  712. x_numofbytes    dd  0
  713. x_numofb2       dd  0
  714. x_counter       dd  0
  715. winxo           dw  0
  716. winyo           dw  0
  717. winxs           dw  0
  718. winys           dw  0
  719. jpeg_st         dd  0
  720. file_dir        dd  0
  721. name_string:    db '/sys/jpegview.jpg',0
  722. rb 256
  723.     .end:
  724.     .cursor: db 19
  725.     .cursor2: db 0
  726.  
  727. align 4
  728.  
  729. rgb16:          db 0,4,8,13,17,21,25,29,34,38,42,46,50,55,59,63
  730. rgb4:           db 0,21,42,63
  731.  
  732. include 'jpegdat.asm'
  733.  
  734. align 4
  735.  
  736. iniciomemoria:
  737.               dd -(iniciomemoria+4),-(iniciomemoria+4),(iniciomemoria+4),.l1,0
  738. .l1           dd 0
  739.  
  740. I_END:
  741. sc     system_colors
  742. ipc_mem dd ?
  743. ipc_mem_size dd ?
  744. ipc_mem_out dd ?
  745. fileattr: rb 40
  746. dirinfo: rb 32+304
  747. fin:
  748.