]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/bitmap.c
fack
[16.git] / src / lib / bitmap.c
index 85f85b1ba9f6bc9502f28dfede0b7f4c8ce5918d..d43411699873b2fca5119cc26a7752b2466813fa 100755 (executable)
 #include <stdlib.h>\r
 #include <malloc.h>\r
 #include "src/lib/bitmap.h"\r
-#include "src/lib/modex16.h"\r
-\r
-static struct pcxHeader {\r
-    byte id;\r
-    byte version;\r
-    byte encoding;\r
-    byte bpp;\r
-    word xmin;\r
-    word ymin;\r
-    word xmax;\r
-    word ymax;\r
-    word hres;\r
-    word vres;\r
-    byte pal16[48];\r
-    byte res1;\r
-    word bpplane;\r
-    word palType;\r
-    word hScreenSize;\r
-    word vScreenSize;\r
-    byte padding[54];\r
-} head;\r
-\r
 \r
 static void loadPcxStage1(FILE *file, bitmap_t *result) {\r
-    long bufSize;\r
-    int index;\r
-    byte count, val;\r
-    long int pos;\r
+       long bufSize;\r
+       int index;\r
+       byte count, val;\r
+       long int pos;\r
 \r
-    /* read the header */\r
-    fread(&head, sizeof(char), sizeof(struct pcxHeader), file);\r
+       /* read the header */\r
+       fread(&head, sizeof(char), sizeof(struct pcxHeader), file);\r
 \r
-    /* get the width and height */\r
-    result->width = head.xmax - head.xmin + 1;\r
-    result->height = head.ymax - head.ymin + 1;\r
+       /* get the width and height */\r
+       result->width = head.xmax - head.xmin + 1;\r
+       result->height = head.ymax - head.ymin + 1;\r
 \r
-    /* make sure this  is 8bpp */\r
-    if(head.bpp != 8) {\r
+       /* make sure this  is 8bpp */\r
+       if(head.bpp != 8) {\r
                printf("I only know how to handle 8bpp pcx files!\n");\r
                fclose(file);\r
                exit(-2);\r
-    }\r
+       }\r
 }\r
 \r
 \r
 static void loadPcxPalette(FILE *file, bitmap_t *result) {\r
-    byte val;\r
-    int index;\r
-\r
-    /* handle the palette */\r
-    fseek(file, -769, SEEK_END);\r
-    val = fgetc(file);\r
-    result->palette = modexNewPal();\r
-    if(head.version == 5 && val == 12) {\r
+       byte val;\r
+       int index;\r
+\r
+       /* handle the palette */\r
+       fseek(file, -769, SEEK_END);\r
+       val = fgetc(file);\r
+       result->palette = modexNewPal();\r
+       if(head.version == 5 && val == 12) {\r
        /* use the vga palette */\r
        for(index=0; !feof(file) && index < PAL_SIZE; index++) {\r
-           val = fgetc(file);\r
-           result->palette[index] = val >> 2;\r
+               val = fgetc(file);\r
+               result->palette[index] = val >> 2;\r
        }\r
-    } else {\r
+       } else {\r
        /* use the 16 color palette */\r
        for(index=0; index<48; index++) {\r
-           result->palette[index]  = head.pal16[index];\r
+               result->palette[index]  = head.pal16[index];\r
+       }\r
        }\r
-    }\r
 }\r
 \r
 \r
 bitmap_t\r
 bitmapLoadPcx(char *filename) {\r
-    FILE *file;\r
-    bitmap_t result;\r
-    dword bufSize;\r
-    int index;\r
-    byte count, val;\r
-\r
-    /* open the PCX file for reading */\r
-    file = fopen(filename, "rb");\r
-    if(!file) {\r
+       FILE *file;\r
+       bitmap_t result;\r
+       dword bufSize;\r
+       int index;\r
+       byte count, val;\r
+\r
+       /* open the PCX file for reading */\r
+       file = fopen(filename, "rb");\r
+       if(!file) {\r
                printf("Could not open %s for reading.\n", filename);\r
                exit(-2);\r
-    }\r
+       }\r
 \r
-    /* load the first part of the pcx file */\r
-    loadPcxStage1(file, &result);\r
+       /* load the first part of the pcx file */\r
+       loadPcxStage1(file, &result);\r
 \r
        /* allocate the buffer */\r
        //printf("%zu\n", _memmax());\r
@@ -130,9 +108,9 @@ bitmapLoadPcx(char *filename) {
                exit(-1);\r
        }\r
 \r
-    /*  read the buffer in */\r
-    index = 0;\r
-    do {\r
+       /*  read the buffer in */\r
+       index = 0;\r
+       do {\r
        /* get the run length and the value */\r
        count = fgetc(file);\r
        if(0xC0 ==  (count & 0xC0)) { /* this is the run count */\r
@@ -147,50 +125,51 @@ bitmapLoadPcx(char *filename) {
        for(; count && index < bufSize; count--,index++)  {\r
                result.data[index] = val;\r
        }\r
-    } while(index < bufSize);\r
+       } while(index < bufSize);\r
+       printf("index=%d\n", index);\r
 \r
-    loadPcxPalette(file, &result);\r
+       loadPcxPalette(file, &result);\r
 \r
-    fclose(file);\r
+       fclose(file);\r
 \r
-    return result;\r
+       return result;\r
 }\r
 \r
-//update!!\r
+//TODO: update!!\r
 tileset_t\r
 bitmapLoadPcxTiles(char *filename, word twidth, word theight) {\r
-    tileset_t ts;\r
-    FILE *file;\r
-    bitmap_t result;\r
-    int i;\r
+       tileset_t ts;\r
+       FILE *file;\r
+       bitmap_t result;\r
+       int i;\r
 \r
-    /* open the PCX file for reading */\r
-    file = fopen(filename, "rb");\r
+       /* open the PCX file for reading */\r
+       file = fopen(filename, "rb");\r
        if(!file) {\r
                printf("Could not open %s for reading.\n", filename);\r
                exit(-2);\r
        }\r
 \r
-    /* load the first part of the pcx file */\r
-    loadPcxStage1(file, &result);\r
+       /* load the first part of the pcx file */\r
+       loadPcxStage1(file, &result);\r
 \r
-    /* get the number of tiles and set up the result structure */\r
-    ts.twidth = twidth;\r
-    ts.theight = theight;\r
-    ts.ntiles = (result.width/twidth) * (result.height/theight);\r
-    ts.palette = result.palette;\r
+       /* get the number of tiles and set up the result structure */\r
+       ts.twidth = twidth;\r
+       ts.theight = theight;\r
+       ts.ntiles = (result.width/twidth) * (result.height/theight);\r
+       ts.palette = result.palette;\r
 \r
        /* allocate the pixel storage for the tiles */\r
        ts.data = malloc(sizeof(byte*) * ts.ntiles);\r
-       ts.data[0] = malloc(sizeof(byte) * ts.ntiles * twidth * theight);\r
+       //ts.data[0] = malloc(sizeof(byte) * ts.ntiles * twidth * theight);\r
        for(i=1; i < ts.ntiles; i++) {\r
                ts.data[i] = ts.data[i-1] + twidth * theight;\r
        }\r
 \r
-    /* finish off the file */\r
-    loadPcxPalette(file, &result);\r
+       /* finish off the file */\r
+       loadPcxPalette(file, &result);\r
 \r
-    fclose(file);\r
+       fclose(file);\r
 \r
-    return ts;\r
+       return ts;\r
 }\r