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