From 5c8db81871ff53318c10d77ebdd424e49c24a48a Mon Sep 17 00:00:00 2001 From: Robert Lowe Date: Tue, 30 Sep 2014 22:01:10 -0400 Subject: [PATCH] Refactored out the PCX functions. Started on a better tile loader --- 16/modex16/BITMAP.C | 31 +++++++++++++ 16/modex16/modex16.c | 99 ----------------------------------------- 16/modex16/modex16.h | 3 -- 16/modex16/pcxtest.exe | Bin 36552 -> 36226 bytes 16/modex16/scroll.exe | Bin 18922 -> 18596 bytes 16/modex16/test.exe | Bin 17536 -> 17210 bytes 16/modex16/test2.exe | Bin 17288 -> 16962 bytes 7 files changed, 31 insertions(+), 102 deletions(-) diff --git a/16/modex16/BITMAP.C b/16/modex16/BITMAP.C index b1521526..8287e57d 100644 --- a/16/modex16/BITMAP.C +++ b/16/modex16/BITMAP.C @@ -126,6 +126,37 @@ bitmapLoadPcx(char *filename) { tileset_t bitmapLoadPcxTiles(char *filename, word twidth, word theight) { tileset_t ts; + FILE *file; + bitmap_t result; + int i; + + /* 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); + + /* 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); + 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); + + fclose(file); return ts; } diff --git a/16/modex16/modex16.c b/16/modex16/modex16.c index 71537b66..f01116b5 100644 --- a/16/modex16/modex16.c +++ b/16/modex16/modex16.c @@ -11,26 +11,6 @@ byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette); static byte tmppal[PAL_SIZE]; -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]; -}; - static void vgaSetMode(byte mode) @@ -623,82 +603,3 @@ modexWaitBorder() { /* spin */ } } - - -bitmap_t -modexLoadPcx(char *filename) { - FILE *file; - bitmap_t result; - struct pcxHeader head; - long 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); - } - - /* read the header */ - fread(&head, sizeof(char), sizeof(struct pcxHeader), file); - - /* make sure this is 8bpp */ - if(head.bpp != 8) { - printf("I only know how to handle 8bpp pcx files!\n"); - fclose(file); - exit(-2); - } - - /* allocate the buffer */ - result.width = head.xmax - head.xmin + 1; - result.height = head.ymax - head.ymin + 1; - bufSize = result.width * result.height; - result.data = malloc(bufSize); - if(!result.data) { - printf("Could not allocate memory for bitmap data."); - fclose(file); - exit(-1); - } - - /* 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 */ - count &= 0x3f; - val = fgetc(file); - } else { - val = count; - count = 1; - } - - /* write the pixel the specified number of times */ - for(; count && index < bufSize; count--,index++) { - result.data[index] = val; - } - } while(index < bufSize); - - /* 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; - } - } else { - /* use the 16 color palette */ - for(index=0; index<48; index++) { - result.palette[index] = head.pal16[index]; - } - } - - fclose(file); - - return result; -} diff --git a/16/modex16/modex16.h b/16/modex16/modex16.h index f45356b5..77573105 100644 --- a/16/modex16/modex16.h +++ b/16/modex16/modex16.h @@ -55,9 +55,6 @@ void modexPalWhite(); void modexPalUpdate(byte *p); void modexWaitBorder(); -/* bitmap functions */ -bitmap_t modexLoadPcx(char *filename); - /* -======================= Constants & Vars ==========================- */ extern byte far* VGA; /* The VGA Memory */ #define SCREEN_SEG 0xa000 diff --git a/16/modex16/pcxtest.exe b/16/modex16/pcxtest.exe index 2ae847e58b06b76d2677dc7d17d032785442f6a1..20910efc5256fe0850a970f771f3855eac8beaf9 100644 GIT binary patch delta 6687 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 diff --git a/16/modex16/scroll.exe b/16/modex16/scroll.exe index 5e87bdc4fe7f945f1a2eebdf4d3d0f9281967701..46167a51179064a08984c6438917b51f9d380607 100755 GIT binary patch delta 4435 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 JBbQ_#^gloTudo0B delta 4646 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 ZPadl;fj=AV{JAo^v)}=kC#K~g^nVJf(u)89 diff --git a/16/modex16/test.exe b/16/modex16/test.exe index 8efde54edc09a739fd42eb6f5528cb63d7a13ff2..63a3da16d6ec199fa9baa5e9623d6ba1f5dc1e0e 100644 GIT binary patch delta 3790 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 Dx!0(v delta 4029 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