summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/Pcx.h
blob: fdfbf0b9d435f8152719b1cf0caf803762fe07e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    PCX image file loader
*/

#ifndef PCX_H
#define PCX_H

// +--------------------------------------------------------------------+

enum { PCX_OK, PCX_NOMEM, PCX_TOOBIG, PCX_NOFILE };

struct PcxHeader
{
    char  manufacturer;    // Always set to 10
    char  version;         // Always 5 for 256-color files
    char  encoding;        // Always set to 1
    char  bits_per_pixel;  // Should be 8 for 256-color files
    short xmin,ymin;       // Coordinates for top left corner
    short xmax,ymax;       // Width and height of image
    short hres;            // Horizontal resolution of image
    short vres;            // Vertical resolution of image
    char  palette16[48];   // EGA palette; not used for 256-color files
    char  reserved;        // Reserved for future use
    char  color_planes;    // Color planes
    short bytes_per_line;  // Number of bytes in 1 line of pixels
    short palette_type;    // Should be 2 for color palette
    char  filler[58];      // Nothing but junk
};

// +--------------------------------------------------------------------+

struct PcxImage
{
    static const char* TYPENAME() { return "PcxImage"; }

    PcxImage(short w, short h, unsigned long* hibits);
    PcxImage(short w, short h, unsigned char* bits, unsigned char* colors);

    PcxImage();
    ~PcxImage();

    int Load(char *filename);
    int Save(char *filename);

    int LoadBuffer(unsigned char* buf, int len);

    PcxHeader      hdr;
    unsigned char* bitmap;
    unsigned long* himap;
    unsigned char  pal[768];
    unsigned long  imagebytes;
    unsigned short width, height;
};

// +--------------------------------------------------------------------+


#endif