X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fbitmap.c;h=5e65195e9ec0391bbb8cf1cbcc856d26918868ea;hb=3b3f3b4bc62245426ea4dec22cbfaa7cfbf13645;hp=cc57552a8a3e54678c0cd3d38df048bacf8c27df;hpb=fa22c78a917561d4abf178f8c4f51b9526f665cf;p=16.git diff --git a/src/lib/bitmap.c b/src/lib/bitmap.c index cc57552a..5e65195e 100644 --- a/src/lib/bitmap.c +++ b/src/lib/bitmap.c @@ -1,5 +1,28 @@ +/* Project 16 Source Code~ + * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 + * + * This file is part of Project 16. + * + * Project 16 is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Project 16 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + #include -#include +#include +#include #include "src/lib/bitmap.h" #include "src/lib/modex16.h" @@ -39,9 +62,9 @@ static void loadPcxStage1(FILE *file, bitmap_t *result) { /* make sure this is 8bpp */ if(head.bpp != 8) { - printf("I only know how to handle 8bpp pcx files!\n"); - fclose(file); - exit(-2); + printf("I only know how to handle 8bpp pcx files!\n"); + fclose(file); + exit(-2); } } @@ -73,28 +96,39 @@ bitmap_t bitmapLoadPcx(char *filename) { FILE *file; bitmap_t result; - long bufSize; + 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); + printf("Could not open %s for reading.\n", filename); + exit(-2); } /* load the first part of the pcx file */ loadPcxStage1(file, &result); - /* allocate the buffer */ - bufSize = result.width * result.height; - result.data = _fmalloc(bufSize); //it breaks right here~ - if(!result.data) { - printf("Could not allocate memory for bitmap data."); - fclose(file); - exit(-1); - } + /* allocate the buffer */ + //printf("%zu\n", _memmax()); + bufSize = (/*(dword)*/result.width * result.height); + result.data = malloc(bufSize); +// result.data = (byte far *)_fmalloc(bufSize); +// result.data = (byte __huge *)halloc(bufSize, sizeof(byte)); + /*printf("&bufSize=%p\n", &bufSize); + printf("&result.data=%p\n", result.data); + printf("Size of block is %zu bytes\n", _msize(result.data)); + printf("Size of bufSize is %zu bytes\n", bufSize); + printf("Size of result.width is %zu \n", result.width); + printf("Size of result.height is %zu \n", result.height); + printf("Dimensions of result is %lu\n", (dword)result.width*result.height);*/ + //exit(0); + if(!result.data) { + fprintf(stderr, "Could not allocate memory for bitmap data."); + fclose(file); + exit(-1); + } /* read the buffer in */ index = 0; @@ -102,16 +136,16 @@ bitmapLoadPcx(char *filename) { /* get the run length and the value */ count = fgetc(file); if(0xC0 == (count & 0xC0)) { /* this is the run count */ - count &= 0x3f; - val = fgetc(file); + count &= 0x3f; + val = fgetc(file); } else { - val = count; - count = 1; + val = count; + count = 1; } - + /* write the pixel the specified number of times */ for(; count && index < bufSize; count--,index++) { - result.data[index] = val; + result.data[index] = val; } } while(index < bufSize); @@ -122,7 +156,7 @@ bitmapLoadPcx(char *filename) { return result; } - +//update!! tileset_t bitmapLoadPcxTiles(char *filename, word twidth, word theight) { tileset_t ts; @@ -132,10 +166,10 @@ bitmapLoadPcxTiles(char *filename, word twidth, word theight) { /* open the PCX file for reading */ file = fopen(filename, "rb"); - if(!file) { - printf("Could not open %s for reading.\n", filename); - exit(-2); - } + if(!file) { + printf("Could not open %s for reading.\n", filename); + exit(-2); + } /* load the first part of the pcx file */ loadPcxStage1(file, &result); @@ -146,12 +180,12 @@ bitmapLoadPcxTiles(char *filename, word twidth, word theight) { ts.ntiles = (result.width/twidth) * (result.height/theight); ts.palette = result.palette; - /* allocate the pixel storage for the tiles */ - ts.data = _fmalloc(sizeof(byte*) * ts.ntiles); - ts.data[0] = _fmalloc(sizeof(byte) * ts.ntiles * twidth * theight); - for(i=1; i < ts.ntiles; i++) { - ts.data[i] = ts.data[i-1] + twidth * theight; - } + /* allocate the pixel storage for the tiles */ + ts.data = malloc(sizeof(byte*) * ts.ntiles); + ts.data[0] = malloc(sizeof(byte) * ts.ntiles * twidth * theight); + for(i=1; i < ts.ntiles; i++) { + ts.data[i] = ts.data[i-1] + twidth * theight; + } /* finish off the file */ loadPcxPalette(file, &result);