+/* 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 <http://www.gnu.org/licenses/>, or
+ * write to the Free Software Foundation, Inc., 51 Franklin Street,
+ * Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
#include <stdio.h>\r
-#include <stdlib.h>\r
+#include <stdlib.h>
+#include <malloc.h>
#include "src/lib/bitmap.h"\r
#include "src/lib/modex16.h"\r
\r
\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
+ printf("I only know how to handle 8bpp pcx files!\n");\r
+ fclose(file);\r
+ exit(-2);\r
}\r
}\r
\r
bitmapLoadPcx(char *filename) {\r
FILE *file;\r
bitmap_t result;\r
- long bufSize;\r
+ dword bufSize;\r
int index;\r
byte count, val;
\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
+ 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
- /* allocate the buffer */\r
- bufSize = result.width * result.height;
- result.data = malloc(bufSize); //it breaks right here~
- if(!result.data) {\r
- printf("Could not allocate memory for bitmap data.");\r
- fclose(file);\r
- exit(-1);\r
- }\r
+ /* allocate the buffer */
+ //printf("%zu\n", _memmax());\r
+ 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.");\r
+ fclose(file);\r
+ exit(-1);\r
+ }\r
\r
/* read the buffer in */\r
index = 0;\r
/* get the run length and the value */\r
count = fgetc(file);\r
if(0xC0 == (count & 0xC0)) { /* this is the run count */\r
- count &= 0x3f;\r
- val = fgetc(file);\r
+ count &= 0x3f;\r
+ val = fgetc(file);\r
} else {\r
- val = count;\r
- count = 1;\r
+ val = count;\r
+ count = 1;\r
}\r
-\r
+
/* write the pixel the specified number of times */\r
for(; count && index < bufSize; count--,index++) {\r
- result.data[index] = val;\r
+ result.data[index] = val;\r
}\r
} while(index < bufSize);\r
\r
return result;\r
}\r
\r
-\r
+//update!!\r
tileset_t\r
bitmapLoadPcxTiles(char *filename, word twidth, word theight) {\r
tileset_t ts;\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
+ 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
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
- for(i=1; i < ts.ntiles; i++) {\r
- ts.data[i] = ts.data[i-1] + twidth * theight;\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
+ 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