Changeset 2411 for libcaca/trunk


Ignore:
Timestamp:
Jun 15, 2008, 3:50:28 PM (12 years ago)
Author:
Sam Hocevar
Message:
  • Make cacaview use cucul_file_t functions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/common-image.c

    r2300 r2411  
    1616
    1717#if !defined(__KERNEL__)
    18 #   include <stdio.h>
    1918#   include <string.h>
    2019#   include <stdlib.h>
     
    2322#if defined(USE_IMLIB2)
    2423#   include <Imlib2.h>
    25 #else
    26 #   if !defined(__KERNEL__)
    27 #      include <stdio.h>
    28 #   endif
    2924#endif
    3025
     
    3429
    3530#if !defined(USE_IMLIB2)
    36 static unsigned int u32fread(FILE *);
    37 static unsigned int u16fread(FILE *);
    38 static unsigned int u8fread(FILE *);
     31static unsigned int u32fread(cucul_file_t *);
     32static unsigned int u16fread(cucul_file_t *);
     33static unsigned int u8fread(cucul_file_t *);
    3934#endif
    4035
     
    8378    unsigned int red[256], green[256], blue[256], alpha[256];
    8479    unsigned int i, colors, offset, tmp, planes;
    85     FILE *fp;
    86 
    87     fp = fopen(name, "rb");
    88     if(!fp)
    89     {
    90         free(im);
    91         return NULL;
    92     }
    93 
    94     if(u16fread(fp) != 0x4d42)
    95     {
    96         fclose(fp);
    97         free(im);
    98         return NULL;
    99     }
    100 
    101     u32fread(fp); /* size */
    102     u16fread(fp); /* reserved 1 */
    103     u16fread(fp); /* reserved 2 */
    104 
    105     offset = u32fread(fp);
    106 
    107     tmp = u32fread(fp); /* header size */
     80    cucul_file_t *f;
     81
     82    f = cucul_file_open(name, "rb");
     83    if(!f)
     84    {
     85        free(im);
     86        return NULL;
     87    }
     88
     89    if(u16fread(f) != 0x4d42)
     90    {
     91        cucul_file_close(f);
     92        free(im);
     93        return NULL;
     94    }
     95
     96    u32fread(f); /* size */
     97    u16fread(f); /* reserved 1 */
     98    u16fread(f); /* reserved 2 */
     99
     100    offset = u32fread(f);
     101
     102    tmp = u32fread(f); /* header size */
    108103    if(tmp == 40)
    109104    {
    110         im->w = u32fread(fp);
    111         im->h = u32fread(fp);
    112         planes = u16fread(fp);
    113         bpp = u16fread(fp);
    114 
    115         tmp = u32fread(fp); /* compression */
     105        im->w = u32fread(f);
     106        im->h = u32fread(f);
     107        planes = u16fread(f);
     108        bpp = u16fread(f);
     109
     110        tmp = u32fread(f); /* compression */
    116111        if(tmp != 0)
    117112        {
    118             fclose(fp);
     113            cucul_file_close(f);
    119114            free(im);
    120115            return NULL;
    121116        }
    122117
    123         u32fread(fp); /* sizeimage */
    124         u32fread(fp); /* xpelspermeter */
    125         u32fread(fp); /* ypelspermeter */
    126         u32fread(fp); /* biclrused */
    127         u32fread(fp); /* biclrimportantn */
     118        u32fread(f); /* sizeimage */
     119        u32fread(f); /* xpelspermeter */
     120        u32fread(f); /* ypelspermeter */
     121        u32fread(f); /* biclrused */
     122        u32fread(f); /* biclrimportantn */
    128123
    129124        colors = (offset - 54) / 4;
    130125        for(i = 0; i < colors && i < 256; i++)
    131126        {
    132             blue[i] = u8fread(fp) * 16;
    133             green[i] = u8fread(fp) * 16;
    134             red[i] = u8fread(fp) * 16;
     127            blue[i] = u8fread(f) * 16;
     128            green[i] = u8fread(f) * 16;
     129            red[i] = u8fread(f) * 16;
    135130            alpha[i] = 0;
    136             u8fread(fp);
     131            u8fread(f);
    137132        }
    138133    }
    139134    else if(tmp == 12)
    140135    {
    141         im->w = u32fread(fp);
    142         im->h = u32fread(fp);
    143         planes = u16fread(fp);
    144         bpp = u16fread(fp);
     136        im->w = u32fread(f);
     137        im->h = u32fread(f);
     138        planes = u16fread(f);
     139        bpp = u16fread(f);
    145140
    146141        colors = (offset - 26) / 3;
    147142        for(i = 0; i < colors && i < 256; i++)
    148143        {
    149             blue[i] = u8fread(fp);
    150             green[i] = u8fread(fp);
    151             red[i] = u8fread(fp);
     144            blue[i] = u8fread(f);
     145            green[i] = u8fread(f);
     146            red[i] = u8fread(f);
    152147            alpha[i] = 0;
    153148        }
     
    155150    else
    156151    {
    157         fclose(fp);
     152        cucul_file_close(f);
    158153        free(im);
    159154        return NULL;
     
    169164    if(!im->w || im->w > 0x10000 || !im->h || im->h > 0x10000 || planes != 1)
    170165    {
    171         fclose(fp);
     166        cucul_file_close(f);
    172167        free(im);
    173168        return NULL;
     
    178173    if(!im->pixels)
    179174    {
    180         fclose(fp);
     175        cucul_file_close(f);
    181176        free(im);
    182177        return NULL;
     
    197192                    k = j % 32;
    198193                    if(k == 0)
    199                         bits = u32fread(fp);
     194                        bits = u32fread(f);
    200195                    im->pixels[im->w * i * depth + j] =
    201196                        (bits >> ((k & ~0xf) + 0xf - (k & 0xf))) & 0x1;
     
    207202                    k = j % 8;
    208203                    if(k == 0)
    209                         bits = u32fread(fp);
     204                        bits = u32fread(f);
    210205                    im->pixels[im->w * i * depth + j] =
    211206                        (bits >> (4 * ((k & ~0x1) + 0x1 - (k & 0x1)))) & 0xf;
     
    214209            default:
    215210                /* Works for 8bpp, but also for 16, 24 etc. */
    216                 fread(im->pixels + im->w * i * depth, im->w * depth, 1, fp);
     211                cucul_file_read(f, im->pixels + im->w * i * depth,
     212                                im->w * depth);
    217213                /* Pad reads to 4 bytes */
    218214                tmp = (im->w * depth) % 4;
    219215                tmp = (4 - tmp) % 4;
    220216                while(tmp--)
    221                     u8fread(fp);
     217                    u8fread(f);
    222218                break;
    223219        }
     
    245241    }
    246242
    247     fclose(fp);
     243    cucul_file_close(f);
    248244
    249245    /* Create the libcucul dither */
     
    276272
    277273#if !defined(USE_IMLIB2)
    278 static unsigned int u32fread(FILE *fp)
     274static unsigned int u32fread(cucul_file_t * f)
    279275{
    280276    uint8_t buffer[4];
    281     fread(buffer, 4, 1, fp);
     277    cucul_file_read(buffer, 4, 1, fp);
    282278    return ((unsigned int)buffer[3] << 24) | ((unsigned int)buffer[2] << 16)
    283279             | ((unsigned int)buffer[1] << 8) | ((unsigned int)buffer[0]);
    284280}
    285281
    286 static unsigned int u16fread(FILE *fp)
     282static unsigned int u16fread(cucul_file_t * f)
    287283{
    288284    uint8_t buffer[2];
    289     fread(buffer, 2, 1, fp);
     285    cucul_file_read(buffer, 2, 1, fp);
    290286    return ((unsigned int)buffer[1] << 8) | ((unsigned int)buffer[0]);
    291287}
    292288
    293 static unsigned int u8fread(FILE *fp)
     289static unsigned int u8fread(cucul_file_t * f)
    294290{
    295291    uint8_t buffer;
    296     fread(&buffer, 1, 1, fp);
     292    cucul_file_read(&buffer, 1, 1, fp);
    297293    return (unsigned int)buffer;
    298294}
Note: See TracChangeset for help on using the changeset viewer.