X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fbitmap.c;h=5e65195e9ec0391bbb8cf1cbcc856d26918868ea;hb=729ec301fbc67f06250456eecf5e2be7e66f3d02;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);