]> 4ch.mooo.com Git - 16.git/commitdiff
working divided version of pcx files. Used in pcxtest.exe
authorRobert Lowe <pngwen@acm.org>
Sun, 28 Sep 2014 03:00:58 +0000 (23:00 -0400)
committerRobert Lowe <pngwen@acm.org>
Sun, 28 Sep 2014 03:00:58 +0000 (23:00 -0400)
16/modex16/BITMAP.C
16/modex16/pcxtest.c
16/modex16/pcxtest.exe
16/modex16/scroll.exe
16/modex16/test.exe
16/modex16/test2.exe

index 108d8c3098adf12a40b23d5cfeb03d1006eed95b..b1521526f4969ff1b091ffeba946f545ed0c8eb1 100644 (file)
@@ -21,11 +21,10 @@ static struct pcxHeader {
     word hScreenSize;\r
     word vScreenSize;\r
     byte padding[54];\r
-};\r
+} head;\r
 \r
 \r
 static void loadPcxStage1(FILE *file, bitmap_t *result) {\r
-    struct pcxHeader head;\r
     long bufSize;\r
     int index;\r
     byte count, val;\r
@@ -34,26 +33,22 @@ static void loadPcxStage1(FILE *file, bitmap_t *result) {
     /* 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
+\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
-    /* allocate the buffer */\r
-    result->width = head.xmax - head.xmin + 1;\r
-    result->height = head.ymax - head.ymin + 1;\r
-    bufSize = result->width * result->height;\r
-    result->data = malloc(bufSize);\r
-    if(!result->data) {\r
-       printf("Could not allocate memory for bitmap data.");\r
-       fclose(file);\r
-       exit(-1);\r
-    }\r
 \r
-    /* save the position of the pixel data */\r
-    pos = ftell(file);\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
@@ -71,9 +66,6 @@ static void loadPcxStage1(FILE *file, bitmap_t *result) {
            result->palette[index]  = head.pal16[index];\r
        }\r
     }\r
-\r
-    /* go back to the pixel data */\r
-    fseek(file, -pos, SEEK_END);\r
 }\r
 \r
 \r
@@ -81,7 +73,6 @@ bitmap_t
 bitmapLoadPcx(char *filename) {\r
     FILE *file;\r
     bitmap_t result;\r
-    struct pcxHeader head;\r
     long bufSize;\r
     int index;\r
     byte count, val;\r
@@ -96,6 +87,15 @@ bitmapLoadPcx(char *filename) {
     /* load the first part of the pcx file */\r
     loadPcxStage1(file, &result);\r
 \r
+    /* allocate the buffer */\r
+    bufSize = result.width * result.height;\r
+    result.data = malloc(bufSize);\r
+    if(!result.data) {\r
+       printf("Could not allocate memory for bitmap data.");\r
+       fclose(file);\r
+       exit(-1);\r
+    }\r
+\r
     /*  read the buffer in */\r
     index = 0;\r
     do {\r
@@ -115,6 +115,7 @@ bitmapLoadPcx(char *filename) {
        }\r
     } while(index < bufSize);\r
 \r
+    loadPcxPalette(file, &result);\r
 \r
     fclose(file);\r
 \r
index 51b8427beddc43c3ebc3f7a275dbfd06d8c4fc3a..7373e8851dc471018b31c0128b4d842e574b32d3 100644 (file)
@@ -33,7 +33,7 @@ void main() {
 \r
     page=modexDefaultPage();\r
 \r
-    bmp = modexLoadPcx("46113319.pcx");\r
+    bmp = bitmapLoadPcx("46113319.pcx");\r
     modexEnter();\r
 \r
     /* fix up the palette and everything */\r
index a57b981c0bc63df12eeb5a1cd057e0bfdd8635be..2ae847e58b06b76d2677dc7d17d032785442f6a1 100644 (file)
Binary files a/16/modex16/pcxtest.exe and b/16/modex16/pcxtest.exe differ
index a259aeed2cd306c88636e97e43116b48e68fbe36..5e87bdc4fe7f945f1a2eebdf4d3d0f9281967701 100755 (executable)
Binary files a/16/modex16/scroll.exe and b/16/modex16/scroll.exe differ
index 507cd456a6a2b655e899949e4f916ecfc922e636..8efde54edc09a739fd42eb6f5528cb63d7a13ff2 100644 (file)
Binary files a/16/modex16/test.exe and b/16/modex16/test.exe differ
index 0aa470b93d960d5cc4babb8a862eef2f9b45b209..ab46164163ee3b1e7250e0f2300b84026af9f1b9 100644 (file)
Binary files a/16/modex16/test2.exe and b/16/modex16/test2.exe differ