mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-25 20:30:31 +00:00
b2d: add version of this that compiles under Linux
This commit is contained in:
parent
1b425c6a46
commit
cef9b0c106
13
bmp2dhr/Makefile
Normal file
13
bmp2dhr/Makefile
Normal file
@ -0,0 +1,13 @@
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -O2
|
||||
|
||||
all: b2d
|
||||
|
||||
b2d: b2d.o
|
||||
$(CC) $(LFLAGS) -o b2d b2d.o
|
||||
|
||||
b2d.o: b2d.c b2d.h
|
||||
$(CC) $(CFLAGS) -c b2d.c
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o b2d
|
6
bmp2dhr/README
Normal file
6
bmp2dhr/README
Normal file
@ -0,0 +1,6 @@
|
||||
Modified the source a bit, mostly so it compiles and runs
|
||||
on 64-bit Linux.
|
||||
|
||||
Most of it was assumptions about the size of unsigned long in
|
||||
the BMP header.
|
||||
|
6360
bmp2dhr/b2d.c
Normal file
6360
bmp2dhr/b2d.c
Normal file
File diff suppressed because it is too large
Load Diff
924
bmp2dhr/b2d.h
Normal file
924
bmp2dhr/b2d.h
Normal file
@ -0,0 +1,924 @@
|
||||
/* ---------------------------------------------------------------------
|
||||
Bmp2DHR (C) Copyright Bill Buckels 2014.
|
||||
All Rights Reserved.
|
||||
|
||||
Module Name - Description
|
||||
-------------------------
|
||||
|
||||
b2d.h - header file for b2d.c (main program)
|
||||
|
||||
Licence Agreement
|
||||
-----------------
|
||||
|
||||
You have a royalty-free right to use, modify, reproduce and
|
||||
distribute this source code in any way you find useful, provided
|
||||
that you agree that Bill Buckels has no warranty obligations or
|
||||
liability resulting from said distribution in any way whatsoever. If
|
||||
you don't agree, remove this source code and related files from your
|
||||
computer now.
|
||||
|
||||
Written by: Bill Buckels
|
||||
Email: bbuckels@mts.net
|
||||
|
||||
Version 1.0
|
||||
Developed between Aug 2014 and December 2014 with "standard parts".
|
||||
|
||||
Bmp2DHR reads a monochrome, 16 color, 256 color, or 24 bit BMP and writes
|
||||
Apple II color or monochrome HGR or DHGR files.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef BMP2SHR_H
|
||||
#define BMP2SHR_H 1
|
||||
|
||||
/* ***************************************************************** */
|
||||
/* ========================== includes ============================= */
|
||||
/* ***************************************************************** */
|
||||
|
||||
#include "tomthumb.h"
|
||||
|
||||
/* ***************************************************************** */
|
||||
/* ========================== defines ============================== */
|
||||
/* ***************************************************************** */
|
||||
|
||||
/* file name length max */
|
||||
#define MAXF 256
|
||||
|
||||
#define SUCCESS 0
|
||||
#define INVALID -1
|
||||
#define RETRY 911
|
||||
#define BIN_OUTPUT 1
|
||||
#define SPRITE_OUTPUT 2
|
||||
|
||||
/* constants for the biCompression field in a BMP header */
|
||||
#define BI_RGB 0L
|
||||
#define BI_RLE8 1L
|
||||
#define BI_RLE4 2L
|
||||
|
||||
/* DHGR, DLGR, LGR colors - LGR color order */
|
||||
#define LOBLACK 0
|
||||
#define LORED 1
|
||||
#define LODKBLUE 2
|
||||
#define LOPURPLE 3
|
||||
#define LODKGREEN 4
|
||||
#define LOGRAY 5
|
||||
#define LOMEDBLUE 6
|
||||
#define LOLTBLUE 7
|
||||
#define LOBROWN 8
|
||||
#define LOORANGE 9
|
||||
#define LOGREY 10
|
||||
#define LOPINK 11
|
||||
#define LOLTGREEN 12
|
||||
#define LOYELLOW 13
|
||||
#define LOAQUA 14
|
||||
#define LOWHITE 15
|
||||
|
||||
/* HGR color constants */
|
||||
#define HBLACK 0
|
||||
#define HGREEN 1
|
||||
#define HVIOLET 2
|
||||
#define HORANGE 3
|
||||
#define HBLUE 4
|
||||
#define HWHITE 5
|
||||
|
||||
#define RED 0
|
||||
#define GREEN 1
|
||||
#define BLUE 2
|
||||
|
||||
#define FLOYDSTEINBERG 1
|
||||
#define JARVIS 2
|
||||
#define STUCKI 3
|
||||
#define ATKINSON 4
|
||||
#define BURKES 5
|
||||
#define SIERRA 6
|
||||
#define SIERRATWO 7
|
||||
#define SIERRALITE 8
|
||||
#define BUCKELS 9
|
||||
#define CUSTOM 10
|
||||
|
||||
#define ASCIIZ 0
|
||||
#define CRETURN 13
|
||||
#define LFEED 10
|
||||
|
||||
#define PSEUDOMAX 100
|
||||
|
||||
/* ***************************************************************** */
|
||||
/* ========================== typedefs ============================= */
|
||||
/* ***************************************************************** */
|
||||
|
||||
/* Bitmap Header structures */
|
||||
typedef struct __attribute__((__packed__)) tagBITMAPINFOHEADER {
|
||||
uint32_t biSize;
|
||||
uint32_t biWidth;
|
||||
uint32_t biHeight;
|
||||
uint16_t biPlanes;
|
||||
uint16_t biBitCount;
|
||||
uint32_t biCompression;
|
||||
uint32_t biSizeImage;
|
||||
uint32_t biXPelsPerMeter;
|
||||
uint32_t biYPelsPerMeter;
|
||||
uint32_t biClrUsed;
|
||||
uint32_t biClrImportant;
|
||||
} BITMAPINFOHEADER;
|
||||
|
||||
typedef struct __attribute__((__packed__)) tagBITMAPFILEHEADER
|
||||
|
||||
{
|
||||
uint8_t bfType[2];
|
||||
uint32_t bfSize;
|
||||
uint16_t bfReserved1;
|
||||
uint16_t bfReserved2;
|
||||
uint32_t bfOffBits;
|
||||
} BITMAPFILEHEADER;
|
||||
|
||||
typedef struct __attribute__((__packed__)) tagBMPHEADER {
|
||||
BITMAPFILEHEADER bfi;
|
||||
BITMAPINFOHEADER bmi;
|
||||
} BMPHEADER;
|
||||
|
||||
typedef struct __attribute__((__packed__)) tagRGBQUAD {
|
||||
uint8_t rgbBlue;
|
||||
uint8_t rgbGreen;
|
||||
uint8_t rgbRed;
|
||||
uint8_t rgbReserved;
|
||||
} RGBQUAD;
|
||||
|
||||
|
||||
/* ***************************************************************** */
|
||||
/* =================== prototypes as required ===================== */
|
||||
/* ***************************************************************** */
|
||||
|
||||
int16_t GetUserTextFile(void);
|
||||
int dhrgetpixel(int x,int y);
|
||||
|
||||
/* ***************************************************************** */
|
||||
/* ========================== globals ============================== */
|
||||
/* ***************************************************************** */
|
||||
|
||||
/* output buffers */
|
||||
uint8_t *dhrbuf;
|
||||
uint8_t *hgrbuf;
|
||||
|
||||
/* static structures for processing */
|
||||
BITMAPFILEHEADER bfi;
|
||||
BITMAPINFOHEADER bmi;
|
||||
BMPHEADER mybmp,maskbmp;
|
||||
RGBQUAD sbmp[256], maskpalette[256]; /* super vga - applewin */
|
||||
|
||||
/* overlay file for screen titling and framing and "cleansing" */
|
||||
FILE *fpmask = NULL;
|
||||
uint8_t remap[256];
|
||||
|
||||
char bmpfile[MAXF], dibfile[MAXF], scaledfile[MAXF], previewfile[MAXF], reformatfile[MAXF], maskfile[MAXF], fmask[MAXF];
|
||||
char spritefile[MAXF], mainfile[MAXF],auxfile[MAXF],a2fcfile[MAXF],usertextfile[MAXF],vbmpfile[MAXF],fname[MAXF];
|
||||
|
||||
/* HGR file designations for systems with long file names */
|
||||
/* these match the HGR output options selected */
|
||||
char hgrcolor[MAXF],hgrmono[MAXF],hgrwork[MAXF];
|
||||
|
||||
int mono = 0, dosheader = 0, spritemask = 0, tags=0;
|
||||
int backgroundcolor = 0, quietmode = 1, diffuse = 0, merge = 0, scale = 0, applesoft = 0, outputtype = BIN_OUTPUT;
|
||||
int reformat = 0, debug = 0;
|
||||
int preview = 0, vbmp = 0, hgroutput = 0;
|
||||
int overlay = 0, maskpixel=0, overcolor=0, clearcolor=5;
|
||||
|
||||
/* 2 x 2 general purpose cross-hatching */
|
||||
int xmatrix = 0, ymatrix = 0, threshold = 0;
|
||||
|
||||
uint16_t bmpwidth = 0, bmpheight = 0, spritewidth = 0;
|
||||
|
||||
/* classic size alternate windowed output */
|
||||
/* applies to 320 x 200, 640 x 400, and 640 x 480 only */
|
||||
/* for 320 x 200 the window is 280 x 192 */
|
||||
/* for 640 x the window is 560 x 384 */
|
||||
/* output is always 280 x 192 */
|
||||
/* for 640 output is merged 2 x 2 */
|
||||
int16_t justify = 0, jxoffset = -1, jyoffset = -1;
|
||||
|
||||
/* HGR setting - by default, double colors is off and pixels are set individually */
|
||||
int doubleblack = 0, doublewhite = 0, doublecolors = 1, ditheroneline = 0;
|
||||
|
||||
/* error diffusion dithering settings */
|
||||
int globalclip = 0;
|
||||
int ditherstart = 0;
|
||||
int bleed = 16;
|
||||
int paletteclip = 0;
|
||||
|
||||
/* custom dither file support */
|
||||
int16_t customdivisor;
|
||||
int16_t customdither[3][11];
|
||||
|
||||
uint8_t msk[]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
|
||||
int reverse = 0;
|
||||
|
||||
/* the line buffers in this program are designed to hold a 320 pixel scanline...
|
||||
for reusability in other modules and for other Apple II modes
|
||||
including SHR 320 */
|
||||
/* for DHGR monochrome they must hold a scanline 560 pixels wide */
|
||||
uint8_t bmpscanline[1920],
|
||||
bmpscanline2[1920],
|
||||
dibscanline1[1920],
|
||||
dibscanline2[1920],
|
||||
dibscanline3[1920],
|
||||
dibscanline4[1920],
|
||||
previewline[1920],
|
||||
maskline[560];
|
||||
|
||||
/* Floyd-Steinberg Etc. Dithering */
|
||||
uint8_t dither = 0, errorsum = 0, serpentine = 0;
|
||||
/* color channel buffers for Floyd-Steinberg Etc. Dithering */
|
||||
/* note that these are arrays of short integers (2 bytes * 320) */
|
||||
/* current line contains current scanline values
|
||||
+ (plus) seed values (error values) from previous line
|
||||
|
||||
these error values are the linear distance in a scale of 0-255
|
||||
between the real color and the nearest palette color.
|
||||
|
||||
each of the r,g,b color channels is separate.
|
||||
|
||||
a psychovisual palette match is done with the real color
|
||||
to get the near color from the palette
|
||||
|
||||
the dither error is then applied to neighboring pixels
|
||||
using the dithering filter's distribution pattern
|
||||
|
||||
later on when the color channels are finally reconstructed
|
||||
a psychovisual palette match is done again to get the dither
|
||||
color.
|
||||
|
||||
if preview is turned-on the output can be viewed in
|
||||
a BMP viewer.
|
||||
|
||||
*/
|
||||
int16_t redDither[640],greenDither[640],blueDither[640];
|
||||
/* seed values from previous line */
|
||||
int16_t redSeed[640],greenSeed[640],blueSeed[640];
|
||||
int16_t redSeed2[640],greenSeed2[640],blueSeed2[640];
|
||||
int16_t *colorptr, *seedptr, *seed2ptr, color_error;
|
||||
|
||||
int colorbleed = 100;
|
||||
|
||||
/* color hgr dither routines */
|
||||
/* these buffers correspond to redDither, blueDither, greenDither */
|
||||
int16_t redSave[320], greenSave[320], blueSave[320];
|
||||
int16_t OrangeBlueError[320], GreenVioletError[320];
|
||||
uint8_t HgrPixelPalette[320];
|
||||
uint8_t dither7 = 0, hgrdither = 0;
|
||||
|
||||
/* HGR output routines */
|
||||
uint8_t palettebits[40], hgrpaltype = 255; /* Both palettes are active by default */
|
||||
uint8_t hgrcolortype = 0;
|
||||
uint8_t work280[280], buf280[560];
|
||||
|
||||
/* built-in palette options */
|
||||
/* based on DHGR, DLGR, LGR colors */
|
||||
/* LGR color order */
|
||||
uint8_t kegs32colors[16][3] = {
|
||||
{0,0,0}, /* black */
|
||||
{221,0,51}, /* red */
|
||||
{0,0,153}, /* dk blue */
|
||||
{221,0,221}, /* purple */
|
||||
{0,119,0}, /* dk green */
|
||||
{85,85,85}, /* gray */
|
||||
{34,34,255}, /* med blue */
|
||||
{102,170,255}, /* lt blue */
|
||||
{136,85,34}, /* brown */
|
||||
{255,102,0}, /* orange */
|
||||
{170,170,170}, /* grey */
|
||||
{255,153,136}, /* pink */
|
||||
{0,221,0}, /* lt green */
|
||||
{255,255,0}, /* yellow */
|
||||
{0,255,153}, /* aqua */
|
||||
{255,255,255}/* white */
|
||||
};
|
||||
uint8_t ciderpresscolors[16][3] = {
|
||||
{0,0,0}, /* black */
|
||||
{221,0,51}, /* red */
|
||||
{0,0,153}, /* dk blue */
|
||||
{221,34,221}, /* purple */
|
||||
{0,119,34}, /* dk green */
|
||||
{85,85,85}, /* gray */
|
||||
{34,34,255}, /* med blue */
|
||||
{102,170,255}, /* lt blue */
|
||||
{136,85,0}, /* brown */
|
||||
{255,102,0}, /* orange */
|
||||
{170,170,170}, /* grey */
|
||||
{255,153,136}, /* pink */
|
||||
{17,221,0}, /* lt green */
|
||||
{255,255,0}, /* yellow */
|
||||
{68,255,153}, /* aqua */
|
||||
{255,255,255}/* white */
|
||||
};
|
||||
|
||||
uint8_t awinoldcolors[16][3] = {
|
||||
{0,0,0}, /* black */
|
||||
{208,0,48}, /* red */
|
||||
{0,0,128}, /* dk blue */
|
||||
{255,0,255}, /* purple */
|
||||
{0,128,0}, /* dk green */
|
||||
{128,128,128}, /* gray */
|
||||
{0,0,255}, /* med blue */
|
||||
{96,160,255}, /* lt blue */
|
||||
{128,80,0}, /* brown */
|
||||
{255,128,0}, /* orange */
|
||||
{192,192,192}, /* grey */
|
||||
{255,144,128}, /* pink */
|
||||
{0,255,0}, /* lt green */
|
||||
{255,255,0}, /* yellow */
|
||||
{64,255,144}, /* aqua */
|
||||
{255,255,255} /* white */
|
||||
};
|
||||
|
||||
uint8_t awinnewcolors[16][3] = {
|
||||
{0,0,0}, /* black */
|
||||
{157,9,102}, /* red */
|
||||
{42,42,229}, /* dk blue */
|
||||
{199,52,255}, /* purple */
|
||||
{0,118,26}, /* dk green */
|
||||
{128,128,128}, /* gray */
|
||||
{13,161,255}, /* med blue */
|
||||
{170,170,255}, /* lt blue */
|
||||
{85,85,0}, /* brown */
|
||||
{242,94,0}, /* orange */
|
||||
{192,192,192}, /* grey */
|
||||
{255,137,229}, /* pink */
|
||||
{56,203,0}, /* lt green */
|
||||
{213,213,26}, /* yellow */
|
||||
{98,246,153}, /* aqua */
|
||||
{255,255,255} /* white */
|
||||
};
|
||||
|
||||
/* http://en.wikipedia.org/wiki/List_of_8-bit_computer_hardware_palettes */
|
||||
uint8_t wikipedia[16][3] = {
|
||||
{0,0,0}, /* black */
|
||||
{114,38,64}, /* red */
|
||||
{64,51,127}, /* dk blue */
|
||||
{228,52,254}, /* purple */
|
||||
{14,89,64}, /* dk green */
|
||||
{128,128,128}, /* gray */
|
||||
{27,154,254}, /* med blue */
|
||||
{191,179,255}, /* lt blue */
|
||||
{64,76,0}, /* brown */
|
||||
{228,101,1}, /* orange */
|
||||
{128,128,128}, /* grey */
|
||||
{241,166,191}, /* pink */
|
||||
{27,203,1}, /* lt green */
|
||||
{191,204,128}, /* yellow */
|
||||
{141,217,191}, /* aqua */
|
||||
{255,255,255} /* white */
|
||||
};
|
||||
|
||||
/* http://wsxyz.net/tohgr.html */
|
||||
/* Sheldon Simm's palette from todhr */
|
||||
/*
|
||||
|
||||
Sheldon is clipping the black and white ranges.
|
||||
|
||||
The usual reason for doing this is for dirty images (caused by poor digitizing or
|
||||
sampling or re-sampling color depth loss due to scaling). By using a clipping threshold
|
||||
at either end of the rgb range, blacks that are not quite black don't match to some other
|
||||
dark color and whites that are not quite white don't match to some other light color.
|
||||
|
||||
I too put this in place as a clipping option when I wrote Bmp2SHR about a year ago in my
|
||||
Brooks output routines but it worked a little differently. I didn't build it into a
|
||||
palette for one thing.
|
||||
|
||||
Sheldon's weighting favours clipping blue gun values at both ends of the range.
|
||||
|
||||
Red is clipped more than green in the high range, and green is clipped more than
|
||||
red in the low range.
|
||||
|
||||
static Pixel pal[] = {
|
||||
{ 1, 4, 8}, // 0 black
|
||||
{ 32, 54, 212}, // 1 dk blue
|
||||
{ 51, 111, 0}, // 2 dk green
|
||||
{ 7, 168, 225}, // 3 med blue
|
||||
{ 99, 77, 0}, // 4 brown
|
||||
{ 126, 126, 126}, // 5 gray
|
||||
{ 67, 200, 0}, // 6 lt green
|
||||
{ 93, 248, 133}, // 7 aqua
|
||||
{ 148, 12, 125}, // 8 red
|
||||
{ 188, 55, 255}, // 9 purple
|
||||
{ 126, 126, 126}, // A grey
|
||||
{ 158, 172, 255}, // B lt blue
|
||||
{ 249, 86, 29}, // C orange
|
||||
{ 255, 129, 236}, // D pink
|
||||
{ 221, 206, 23}, // E yellow
|
||||
{ 248, 250, 244} // F white
|
||||
|
||||
Also note that I use the array name grpal. This was used as a palette in
|
||||
one of Sheldon's previous versions. Since I have propagated this array name
|
||||
to my code and my code is working fine with it, I have no plans to change it
|
||||
to maintain currency with Sheldon's code.
|
||||
|
||||
*/
|
||||
uint8_t grpal[16][3] = {
|
||||
{0,0,0}, /* black */
|
||||
{148,12,125}, /* red - hgr 0*/
|
||||
{32,54,212}, /* dk blue - hgr 0 */
|
||||
{188,55,255}, /* purple - default HGR overlay color */
|
||||
{51,111,0}, /* dk green - hgr 0 */
|
||||
{126,126,126}, /* gray - hgr 0 */
|
||||
{7,168,225}, /* med blue - alternate HGR overlay color */
|
||||
{158,172,255}, /* lt blue - hgr 0 */
|
||||
{99,77,0}, /* brown - hgr 0 */
|
||||
{249,86,29}, /* orange */
|
||||
{126,126,126}, /* grey - hgr 0 */
|
||||
{255,129,236}, /* pink - hgr 0 */
|
||||
{67,200,0}, /* lt green */
|
||||
{221,206,23}, /* yellow - hgr 0 */
|
||||
{93,248,133}, /* aqua - hgr 0 */
|
||||
{255,255,255} /* white */
|
||||
};
|
||||
|
||||
/* Sheldon still uses the RGB values from his old palette for HGR conversion */
|
||||
uint8_t hgrpal[16][3] = {
|
||||
{0x00,0x00,0x00}, /* black */
|
||||
{0xad,0x18,0x28}, /* red */
|
||||
{0x55,0x1b,0xe1}, /* dk blue */
|
||||
{0xe8,0x2c,0xf8}, /* purple 232,44,248 - default hgr overlay color */
|
||||
{0x01,0x73,0x63}, /* dk green */
|
||||
{0x7e,0x82,0x7f}, /* gray */
|
||||
{0x34,0x85,0xfc}, /* med blue - 52,133,252 - alternate HGR overlay color */
|
||||
{0xd1,0x95,0xff}, /* lt blue */
|
||||
{0x33,0x6f,0x00}, /* brown */
|
||||
{0xd0,0x81,0x01}, /* orange */
|
||||
{0x7f,0x7e,0x77}, /* grey */
|
||||
{0xfe,0x93,0xa3}, /* pink */
|
||||
{0x1d,0xd6,0x09}, /* lt green */
|
||||
{0xae,0xea,0x22}, /* yellow */
|
||||
{0x5b,0xeb,0xd9}, /* aqua */
|
||||
{0xff,0xff,0xff} /* white */
|
||||
};
|
||||
|
||||
/* Kegs32 uses Super Convert's colors */
|
||||
uint8_t SuperConvert[16][3] = {
|
||||
0,0,0, /* black */
|
||||
221,0,51, /* red - hgr 0*/
|
||||
0,0,153, /* dk blue - hgr 0 */
|
||||
221,0,221, /* purple */
|
||||
0,119,0, /* dk green - hgr 0 */
|
||||
85,85,85, /* gray - hgr 0 */
|
||||
34,34,255, /* med blue */
|
||||
102,170,255, /* lt blue - hgr 0 */
|
||||
136,85,34, /* brown - hgr 0 */
|
||||
255,102,0, /* orange */
|
||||
170,170,170, /* grey - hgr 0 */
|
||||
255,153,136, /* pink - hgr 0 */
|
||||
0,221,0, /* lt green */
|
||||
255,255,0, /* yellow - hgr 0 */
|
||||
0,255,153, /* aqua - hgr 0 */
|
||||
255,255,255};/* white */
|
||||
|
||||
uint8_t Jace[16][3] = {
|
||||
0,0,0, /* black */
|
||||
177,0,93, /* red */
|
||||
32,41,255, /* dk blue */
|
||||
210,41,255, /* purple */
|
||||
0,127,34, /* dk green */
|
||||
127,127,127, /* gray */
|
||||
0,168,255, /* med blue */
|
||||
160,168,255, /* lt blue */
|
||||
94,86,0, /* brown */
|
||||
255,86,0, /* orange */
|
||||
127,127,127, /* grey */
|
||||
255,127,220, /* pink */
|
||||
44,213,0, /* lt green */
|
||||
222,213,0, /* yellow */
|
||||
77,255,161, /* aqua */
|
||||
255,255,255}; /* white */
|
||||
|
||||
/* https://github.com/cybernesto/VBMP/wiki/Converting-a-picture-into-a-DHGR-color-image-using-the-GIMP */
|
||||
/* Robert Munafo - http://mrob.com/pub/xapple2/colors.html */
|
||||
uint8_t Cybernesto[16][3] = {
|
||||
0, 0, 0, /* 0 Black */
|
||||
227, 30, 96, /* 1 Magenta */
|
||||
96, 78,189, /* 8 Dark Blue */
|
||||
255, 68,253, /* 9 Violet */
|
||||
0,163, 96, /* 4 Dark Green */
|
||||
156,156,156, /* 5 Grey1 */
|
||||
20,207,253, /* 12 Medium Blue */
|
||||
208,195,255, /* 13 Light Blue */
|
||||
96,114, 3, /* 2 Brown */
|
||||
255,106, 60, /* 3 Orange */
|
||||
156,156,156, /* 10 Grey2 */
|
||||
255,160,208, /* 11 Pink */
|
||||
20,245, 60, /* 6 Green */
|
||||
208,221,141, /* 7 Yellow */
|
||||
114,255,208, /* 14 Aqua */
|
||||
255,255,255}; /* 15 White */
|
||||
|
||||
/* pseudopalette support */
|
||||
int16_t pseudocount = 0;
|
||||
int16_t pseudolist[PSEUDOMAX];
|
||||
uint16_t pseudowork[16][3];
|
||||
|
||||
/* "merged" pseudo palette average RGB values*/
|
||||
/* initial values are the average values of p5 NTSC and p12 RGB */
|
||||
uint8_t PseudoPalette[16][3] = {
|
||||
0,0,0,
|
||||
184,6,88,
|
||||
16,27,182,
|
||||
204,27,238,
|
||||
25,115,0,
|
||||
105,105,105,
|
||||
20,101,240,
|
||||
130,171,255,
|
||||
117,81,17,
|
||||
252,94,14,
|
||||
148,148,148,
|
||||
255,141,186,
|
||||
33,210,0,
|
||||
238,230,11,
|
||||
46,251,143,
|
||||
255,255,255};
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------ */
|
||||
/* skip this if you think that this program has been clean up to now. */
|
||||
/* this is more like an egg I laid than an easter egg. */
|
||||
/* some legacy stuff - unhacked skeletons in my closet */
|
||||
/* from the AppleX Aztec C65 distribution - not everything always goes as planned */
|
||||
/* ------------------------------------------------------------------------------ */
|
||||
|
||||
/* "designer" palettes - VGA style mapping colors from BMPA2FC */
|
||||
/* these are in the lo-res color order, same as above */
|
||||
/* in BMPA2FC these were in IBM-PC default BIOS order */
|
||||
|
||||
/* Serious doubt! */
|
||||
/* at this point, I wonder how well BMPA2FC mapped colors from BMP's */
|
||||
/* not very well I think - but it's an old MS-DOS utility and no point
|
||||
in worrying about it now - new users who find this can play with it */
|
||||
|
||||
/* this first array was my first attempt at establishing something that looked like
|
||||
24 bit Lo-Res Colors - I am not even sure where I got the colors
|
||||
they looked like what I wanted at the time before I knew a little more
|
||||
|
||||
the rest of the palettes in here were just pasted forward from ClipShop
|
||||
but with a couple of minor changes to accomodate the move to Windows Paint for Xp
|
||||
and the 16 color BMP's which have been stable ever since.
|
||||
|
||||
why the default palette changed between XP and Windows 3.1 I have no clue.
|
||||
|
||||
*/
|
||||
|
||||
/* If someone happens to use my canvas scheme from
|
||||
my old utilities or whatever, having these here will at least save them
|
||||
from ending-up with work that needs to be redone if they expected remapping */
|
||||
|
||||
/* goes with the canvas bmp that I put out there with AppleX */
|
||||
uint8_t rgbCanvasArray[16][3] = {
|
||||
0 , 0 , 0 ,
|
||||
208, 0 , 48 ,
|
||||
0 , 0 , 128,
|
||||
255, 0 , 255,
|
||||
0 , 128, 0 ,
|
||||
128, 128, 128,
|
||||
0 , 0 , 255,
|
||||
96 , 160, 255,
|
||||
128, 80 , 0 ,
|
||||
255, 128, 0 ,
|
||||
192, 192, 192,
|
||||
255, 144, 128,
|
||||
0 , 255, 0 ,
|
||||
255, 255, 0 ,
|
||||
64 , 255, 144,
|
||||
255, 255, 255};
|
||||
|
||||
/* this might work with old Win16 16 color BMP's */
|
||||
uint8_t rgbBmpArray[16][3] = {
|
||||
0 ,0 , 0 ,
|
||||
191,0 , 0 ,
|
||||
0 ,0 , 191,
|
||||
191,0 , 191,
|
||||
0 ,191, 0 ,
|
||||
128,128, 128,
|
||||
0 ,191, 191,
|
||||
0 ,0 , 255,
|
||||
191,191, 0 ,
|
||||
255,0 , 0 ,
|
||||
192,192, 192,
|
||||
255,0 , 255,
|
||||
0 ,255, 0 ,
|
||||
255,255, 0 ,
|
||||
0 ,255, 255,
|
||||
255,255, 255};
|
||||
|
||||
/* this might work with new Win32 16 color BMP's */
|
||||
uint8_t rgbXmpArray[16][3] = {
|
||||
0 , 0 , 0 ,
|
||||
128, 0 , 0 ,
|
||||
0 , 0 , 128,
|
||||
128, 0 , 128,
|
||||
0 , 128, 0 ,
|
||||
128, 128, 128,
|
||||
0 , 128, 128,
|
||||
0 , 0 , 255,
|
||||
128, 128, 0 ,
|
||||
255, 0 , 0 ,
|
||||
192, 192, 192,
|
||||
255, 0 , 255,
|
||||
0 , 255, 0 ,
|
||||
255, 255, 0 ,
|
||||
0 , 255, 255,
|
||||
255, 255, 255};
|
||||
|
||||
/* from the bios in some PC I had */
|
||||
uint8_t rgbVgaArray[16][3] = {
|
||||
0 , 0 , 0 ,
|
||||
255, 0 , 0 ,
|
||||
0 , 0 , 255,
|
||||
255, 0 , 255,
|
||||
0 , 255, 0 ,
|
||||
85 , 85 , 85 ,
|
||||
0 , 255, 255,
|
||||
85 , 85 , 255,
|
||||
255, 255, 0 ,
|
||||
255, 85 , 85 ,
|
||||
192, 192, 192,
|
||||
255, 85 , 255,
|
||||
85 , 255, 85 ,
|
||||
255, 255, 85 ,
|
||||
85 , 255, 255,
|
||||
255, 255, 255};
|
||||
|
||||
/* some old ZSoft VGA Pcx Colors */
|
||||
uint8_t rgbPcxArray[16][3] = {
|
||||
0 , 0 , 0 ,
|
||||
170, 0 , 0 ,
|
||||
0 , 0 , 170,
|
||||
170, 0 , 170,
|
||||
0 , 170, 0 ,
|
||||
85 , 85 , 85 ,
|
||||
0 , 170, 170,
|
||||
85 , 85 , 255,
|
||||
170, 170, 0 ,
|
||||
255, 85 , 85 ,
|
||||
170, 170, 170,
|
||||
255, 85 , 255,
|
||||
85 , 255, 85 ,
|
||||
255, 255, 85 ,
|
||||
85 , 255, 255,
|
||||
255, 255, 255};
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
/* end of legacy unhacked hack, and back to something that makes sense */
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
/* palette work arrays */
|
||||
uint8_t rgbArray[16][3], rgbAppleArray[16][3], rgbPreview[16][3], rgbUser[16][3];
|
||||
double rgbLuma[16], rgbDouble[16][3];
|
||||
double rgbOrangeDouble[3][3], rgbGreenDouble[3][3];
|
||||
double rgbOrangeLuma[3], rgbGreenLuma[3];
|
||||
|
||||
double rgbLumaBrighten[16], rgbDoubleBrighten[16][3];
|
||||
double rgbLumaDarken[16], rgbDoubleDarken[16][3];
|
||||
|
||||
/* provides base address for page1 hires scanlines */
|
||||
unsigned HB[]={
|
||||
0x2000, 0x2400, 0x2800, 0x2C00, 0x3000, 0x3400, 0x3800, 0x3C00,
|
||||
0x2080, 0x2480, 0x2880, 0x2C80, 0x3080, 0x3480, 0x3880, 0x3C80,
|
||||
0x2100, 0x2500, 0x2900, 0x2D00, 0x3100, 0x3500, 0x3900, 0x3D00,
|
||||
0x2180, 0x2580, 0x2980, 0x2D80, 0x3180, 0x3580, 0x3980, 0x3D80,
|
||||
0x2200, 0x2600, 0x2A00, 0x2E00, 0x3200, 0x3600, 0x3A00, 0x3E00,
|
||||
0x2280, 0x2680, 0x2A80, 0x2E80, 0x3280, 0x3680, 0x3A80, 0x3E80,
|
||||
0x2300, 0x2700, 0x2B00, 0x2F00, 0x3300, 0x3700, 0x3B00, 0x3F00,
|
||||
0x2380, 0x2780, 0x2B80, 0x2F80, 0x3380, 0x3780, 0x3B80, 0x3F80,
|
||||
0x2028, 0x2428, 0x2828, 0x2C28, 0x3028, 0x3428, 0x3828, 0x3C28,
|
||||
0x20A8, 0x24A8, 0x28A8, 0x2CA8, 0x30A8, 0x34A8, 0x38A8, 0x3CA8,
|
||||
0x2128, 0x2528, 0x2928, 0x2D28, 0x3128, 0x3528, 0x3928, 0x3D28,
|
||||
0x21A8, 0x25A8, 0x29A8, 0x2DA8, 0x31A8, 0x35A8, 0x39A8, 0x3DA8,
|
||||
0x2228, 0x2628, 0x2A28, 0x2E28, 0x3228, 0x3628, 0x3A28, 0x3E28,
|
||||
0x22A8, 0x26A8, 0x2AA8, 0x2EA8, 0x32A8, 0x36A8, 0x3AA8, 0x3EA8,
|
||||
0x2328, 0x2728, 0x2B28, 0x2F28, 0x3328, 0x3728, 0x3B28, 0x3F28,
|
||||
0x23A8, 0x27A8, 0x2BA8, 0x2FA8, 0x33A8, 0x37A8, 0x3BA8, 0x3FA8,
|
||||
0x2050, 0x2450, 0x2850, 0x2C50, 0x3050, 0x3450, 0x3850, 0x3C50,
|
||||
0x20D0, 0x24D0, 0x28D0, 0x2CD0, 0x30D0, 0x34D0, 0x38D0, 0x3CD0,
|
||||
0x2150, 0x2550, 0x2950, 0x2D50, 0x3150, 0x3550, 0x3950, 0x3D50,
|
||||
0x21D0, 0x25D0, 0x29D0, 0x2DD0, 0x31D0, 0x35D0, 0x39D0, 0x3DD0,
|
||||
0x2250, 0x2650, 0x2A50, 0x2E50, 0x3250, 0x3650, 0x3A50, 0x3E50,
|
||||
0x22D0, 0x26D0, 0x2AD0, 0x2ED0, 0x32D0, 0x36D0, 0x3AD0, 0x3ED0,
|
||||
0x2350, 0x2750, 0x2B50, 0x2F50, 0x3350, 0x3750, 0x3B50, 0x3F50,
|
||||
0x23D0, 0x27D0, 0x2BD0, 0x2FD0, 0x33D0, 0x37D0, 0x3BD0, 0x3FD0};
|
||||
|
||||
/*
|
||||
|
||||
The following is logically reordered to match the lores
|
||||
color order...
|
||||
|
||||
Repeated
|
||||
Binary
|
||||
Color aux1 main1 aux2 main2 Pattern
|
||||
Black 00 00 00 00 0000
|
||||
Magenta 08 11 22 44 0001
|
||||
Dark Blue 11 22 44 08 1000
|
||||
Violet 19 33 66 4C 1001
|
||||
Dark Green 22 44 08 11 0100
|
||||
Grey1 2A 55 2A 55 0101
|
||||
Medium Blue 33 66 4C 19 1100
|
||||
Light Blue 3B 77 6E 5D 1101
|
||||
Brown 44 08 11 22 0010
|
||||
Orange 4C 19 33 66 0011
|
||||
Grey2 55 2A 55 2A 1010
|
||||
Pink 5D 3B 77 6E 1011
|
||||
Green 66 4C 19 33 0110
|
||||
Yellow 6E 5D 3B 77 0111
|
||||
Aqua 77 6E 5D 3B 1110
|
||||
White 7F 7F 7F 7F 1111
|
||||
|
||||
*/
|
||||
|
||||
/* the following array is based on the above */
|
||||
uint8_t dhrbytes[16][4] = {
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x08,0x11,0x22,0x44,
|
||||
0x11,0x22,0x44,0x08,
|
||||
0x19,0x33,0x66,0x4C,
|
||||
0x22,0x44,0x08,0x11,
|
||||
0x2A,0x55,0x2A,0x55,
|
||||
0x33,0x66,0x4C,0x19,
|
||||
0x3B,0x77,0x6E,0x5D,
|
||||
0x44,0x08,0x11,0x22,
|
||||
0x4C,0x19,0x33,0x66,
|
||||
0x55,0x2A,0x55,0x2A,
|
||||
0x5D,0x3B,0x77,0x6E,
|
||||
0x66,0x4C,0x19,0x33,
|
||||
0x6E,0x5D,0x3B,0x77,
|
||||
0x77,0x6E,0x5D,0x3B,
|
||||
0x7F,0x7F,0x7F,0x7F};
|
||||
|
||||
int16_t lores = 0, loresoutput = 0, appletop = 0;
|
||||
|
||||
/* base addresses for Apple II primary text page */
|
||||
/* also the base addresses for the 48 scanline pairs */
|
||||
/* for Apple II lores graphics mode 40 x 48 x 16 colors */
|
||||
unsigned textbase[24]={
|
||||
0x0400,
|
||||
0x0480,
|
||||
0x0500,
|
||||
0x0580,
|
||||
0x0600,
|
||||
0x0680,
|
||||
0x0700,
|
||||
0x0780,
|
||||
0x0428,
|
||||
0x04A8,
|
||||
0x0528,
|
||||
0x05A8,
|
||||
0x0628,
|
||||
0x06A8,
|
||||
0x0728,
|
||||
0x07A8,
|
||||
0x0450,
|
||||
0x04D0,
|
||||
0x0550,
|
||||
0x05D0,
|
||||
0x0650,
|
||||
0x06D0,
|
||||
0x0750,
|
||||
0x07D0};
|
||||
|
||||
/* the following is used to remap
|
||||
double lo res 4 bit colors
|
||||
from bank 0 to bank 1 */
|
||||
uint8_t dloauxcolor[16] = {
|
||||
0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15};
|
||||
|
||||
/* the following is used to remap
|
||||
double lo res 4 bit colors
|
||||
from bank 1 to bank 0 */
|
||||
|
||||
/*
|
||||
uint8_t dlomaincolor[16] = {
|
||||
0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15};
|
||||
|
||||
*/
|
||||
|
||||
/* resizing tables */
|
||||
|
||||
/* use as-is to use for 320 x 200 */
|
||||
/* merge 4 pixels into one to use for 640 x 400 */
|
||||
uint8_t mix25to24[24][2] = {
|
||||
24,1,
|
||||
23,2,
|
||||
22,3,
|
||||
21,4,
|
||||
20,5,
|
||||
19,6,
|
||||
18,7,
|
||||
17,8,
|
||||
16,9,
|
||||
15,10,
|
||||
14,11,
|
||||
13,12,
|
||||
12,13,
|
||||
11,14,
|
||||
10,15,
|
||||
9,16,
|
||||
8,17,
|
||||
7,18,
|
||||
6,19,
|
||||
5,20,
|
||||
4,21,
|
||||
3,22,
|
||||
2,23,
|
||||
1,24};
|
||||
|
||||
/*
|
||||
|
||||
To scale from 320 to 280, a 7 part mix is used from each pixel
|
||||
in the following pattern with a ratio of 8:7
|
||||
|
||||
00000001 11111122 22222333 33334444 44455555 55666666 67777777
|
||||
00000000 11111111 22222222 33333333 44444444 55555555 66666666
|
||||
|
||||
*/
|
||||
|
||||
uint8_t pixel320to280[7][4] = {
|
||||
7,1,0,1,
|
||||
6,2,1,2,
|
||||
5,3,2,3,
|
||||
4,4,3,4,
|
||||
3,5,4,5,
|
||||
2,6,5,6,
|
||||
1,7,6,7};
|
||||
|
||||
|
||||
/* http://en.wikipedia.org/wiki/List_of_8-bit_computer_hardware_palettes */
|
||||
uint8_t rgbVBMP[16][3] = {
|
||||
0,0,0, /* black */
|
||||
114,38,64, /* red */
|
||||
64,51,127, /* dk blue */
|
||||
228,52,254, /* purple */
|
||||
14,89,64, /* dk green */
|
||||
128,128,128, /* gray */
|
||||
27,154,254, /* med blue */
|
||||
191,179,255, /* lt blue */
|
||||
64,76,0, /* brown */
|
||||
228,101,1, /* orange */
|
||||
128,128,128, /* grey */
|
||||
241,166,191, /* pink */
|
||||
27,203,1, /* lt green */
|
||||
191,204,128, /* yellow */
|
||||
141,217,191, /* aqua */
|
||||
255,255,255};/* white */
|
||||
|
||||
uint8_t RemapLoToHi[16] = {
|
||||
LOBLACK,
|
||||
LORED,
|
||||
LOBROWN,
|
||||
LOORANGE,
|
||||
LODKGREEN,
|
||||
LOGRAY,
|
||||
LOLTGREEN,
|
||||
LOYELLOW,
|
||||
LODKBLUE,
|
||||
LOPURPLE,
|
||||
LOGREY,
|
||||
LOPINK,
|
||||
LOMEDBLUE,
|
||||
LOLTBLUE,
|
||||
LOAQUA,
|
||||
LOWHITE};
|
||||
|
||||
/* 560 x 192 - verbatim DHGR mono output format */
|
||||
uint8_t mono192[62] ={
|
||||
0x42, 0x4D, 0x3E, 0x36, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x28, 0x00,
|
||||
0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0xC0, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00};
|
||||
|
||||
/* 280 x 192 - verbatim HGR output format */
|
||||
uint8_t mono280[62] ={
|
||||
0x42, 0x4D, 0x3E, 0x1B, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x28, 0x00,
|
||||
0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0xC0, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00};
|
||||
|
||||
uint8_t dhgr2hgr[16] = {
|
||||
HBLACK,
|
||||
HBLACK,
|
||||
HBLACK,
|
||||
HVIOLET,
|
||||
HBLACK,
|
||||
HBLACK,
|
||||
HBLUE,
|
||||
HBLACK,
|
||||
HBLACK,
|
||||
HORANGE,
|
||||
HBLACK,
|
||||
HBLACK,
|
||||
HGREEN,
|
||||
HBLACK,
|
||||
HBLACK,
|
||||
HWHITE};
|
||||
|
||||
#endif
|
774
bmp2dhr/tomthumb.h
Normal file
774
bmp2dhr/tomthumb.h
Normal file
@ -0,0 +1,774 @@
|
||||
/* ---------------------------------------------------------------------
|
||||
Bmp2DHR (C) Copyright Bill Buckels 2014.
|
||||
All Rights Reserved.
|
||||
|
||||
Module Name - Description
|
||||
-------------------------
|
||||
|
||||
tomthumb.h - header file for b2d.h (main program header)
|
||||
|
||||
Licence Agreement
|
||||
-----------------
|
||||
|
||||
You have a royalty-free right to use, modify, reproduce and
|
||||
distribute this source code in any way you find useful, provided
|
||||
that you agree that Bill Buckels has no warranty obligations or
|
||||
liability resulting from said distribution in any way whatsoever. If
|
||||
you don't agree, remove this source code and related files from your
|
||||
computer now.
|
||||
|
||||
Written by: Bill Buckels
|
||||
Email: bbuckels@mts.net
|
||||
|
||||
Version 1.0
|
||||
Developed between Aug 2014 and December 2014 with "standard parts".
|
||||
|
||||
Bmp2DHR reads a monochrome, 16 color, 256 color, or 24 bit BMP and writes
|
||||
Apple II color or monochrome HGR or DHGR files.
|
||||
|
||||
|
||||
*/
|
||||
/* ------------------------------------------------------------------------
|
||||
Written by : Bill Buckels
|
||||
Based on a font by Brian Swetland and Robey Pointer
|
||||
|
||||
Date Ported : July 2014
|
||||
1.0 First Release - cc65
|
||||
cross-development environment for current cc65 snapshot
|
||||
includes Windows, Linux, and Mac OSX
|
||||
Licence : You may use this program for whatever you wish as long
|
||||
as you agree that Bill Buckels has no warranty or
|
||||
liability obligations whatsoever from said use.
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
|
||||
The "Tom Thumb" Font (below) was originally developed as a Palm Pilot
|
||||
font by developer Brian Swetland, and "fine-tuned" as a derivative
|
||||
work by Robey Pointer, robeypointer@gmail.com:
|
||||
|
||||
http://robey.lag.net/2010/01/23/tiny-monospace-font.html */
|
||||
|
||||
/*
|
||||
|
||||
The Tom Thumb Font is a derivative work partially covered under the
|
||||
following Copyright and Conditions of use:
|
||||
|
||||
** Copyright 1999 Brian J. Swetland
|
||||
** Copyright 1999 Vassilii Khachaturov
|
||||
** Portions (of vt100.c/vt100.h) copyright Dan Marks
|
||||
**
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions
|
||||
** are met:
|
||||
** 1. Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions, and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions, and the following disclaimer in the
|
||||
** documentation and/or other materials provided with the distribution.
|
||||
** 3. The name of the authors may not be used to endorse or promote products
|
||||
** derived from this software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
/* the following version of the Tom Thumb Font was entirely
|
||||
hand-made by me in my programmer’s editor by simply looking at
|
||||
a bitmap of the font characters and counting pixels.
|
||||
|
||||
Licence: You may use this program for whatever you wish as long
|
||||
as you agree that Bill Buckels has no warranty or
|
||||
liability obligations whatsoever from said use.
|
||||
*/
|
||||
|
||||
#ifndef TOMTHUMB_H
|
||||
#define TOMTHUMB_H 1
|
||||
|
||||
/* unsigned char tomthumb[96][6][3] */
|
||||
unsigned char tomthumb[1728] = {
|
||||
/* 32 */
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* ! */
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* " */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* # */
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* $ */
|
||||
0,1,1,
|
||||
1,1,0,
|
||||
0,1,1,
|
||||
1,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* % */
|
||||
1,0,0,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,0,1,
|
||||
0,0,0,
|
||||
/* & */
|
||||
1,1,0,
|
||||
1,1,0,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* ' */
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* ( */
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
0,0,0,
|
||||
/* ) */
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* * */
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* + */
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
1,1,1,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* , */
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* - */
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* . */
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* / */
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* 0 */
|
||||
0,1,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* 1 */
|
||||
0,1,0,
|
||||
1,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* 2 */
|
||||
1,1,0,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* 3 */
|
||||
1,1,0,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* 4 */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
0,0,0,
|
||||
/* 5 */
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
1,1,0,
|
||||
0,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* 6 */
|
||||
0,1,1,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* 7 */
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* 8 */
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* 9 */
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* : */
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* ; */
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* < */
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
0,0,0,
|
||||
/* = */
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* > */
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* ? */
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* @ */
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* A */
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* B */
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* C */
|
||||
0,1,1,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* D */
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* E */
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* F */
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* G */
|
||||
0,1,1,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* H */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* I */
|
||||
1,1,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* J */
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* K */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* L */
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* M */
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* N */
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* O */
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* P */
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* Q */
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* R */
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* S */
|
||||
0,1,1,
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* T */
|
||||
1,1,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* U */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* V */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* W */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* X */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* Y */
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* Z */
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* [ */
|
||||
1,1,1,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* \ */
|
||||
0,0,0,
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* ] */
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* ^ */
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* _ */
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* ` */
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* a */
|
||||
0,0,0,
|
||||
1,1,0,
|
||||
0,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* b */
|
||||
1,0,0,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* c */
|
||||
0,0,0,
|
||||
0,1,1,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* d */
|
||||
0,0,1,
|
||||
0,1,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* e */
|
||||
0,0,0,
|
||||
0,1,1,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* f */
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,1,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* g */
|
||||
0,0,0,
|
||||
0,1,1,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
/* h */
|
||||
1,0,0,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* i */
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* j */
|
||||
0,0,1,
|
||||
0,0,0,
|
||||
0,0,1,
|
||||
0,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
/* k */
|
||||
1,0,0,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* l */
|
||||
1,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* m */
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* n */
|
||||
0,0,0,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* o */
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* p */
|
||||
0,0,0,
|
||||
1,1,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,1,0,
|
||||
1,0,0,
|
||||
/* q */
|
||||
0,0,0,
|
||||
0,1,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,1,
|
||||
/* r */
|
||||
0,0,0,
|
||||
0,1,1,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
1,0,0,
|
||||
0,0,0,
|
||||
/* s */
|
||||
0,0,0,
|
||||
0,1,1,
|
||||
1,1,0,
|
||||
0,1,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* t */
|
||||
0,1,0,
|
||||
1,1,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* u */
|
||||
0,0,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* v */
|
||||
0,0,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* w */
|
||||
0,0,0,
|
||||
1,0,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* x */
|
||||
0,0,0,
|
||||
1,0,1,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
1,0,1,
|
||||
0,0,0,
|
||||
/* y */
|
||||
0,0,0,
|
||||
1,0,1,
|
||||
1,0,1,
|
||||
0,1,1,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
/* z */
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
0,1,1,
|
||||
1,1,0,
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
/* { */
|
||||
0,1,1,
|
||||
0,1,0,
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,1,1,
|
||||
0,0,0,
|
||||
/* | */
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
0,1,0,
|
||||
0,1,0,
|
||||
0,0,0,
|
||||
/* } */
|
||||
1,1,0,
|
||||
0,1,0,
|
||||
0,0,1,
|
||||
0,1,0,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
/* ~ */
|
||||
0,1,1,
|
||||
1,1,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
/* ¦ */
|
||||
1,1,1,
|
||||
0,0,0,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
1,1,1,
|
||||
0,0,0};
|
||||
#endif
|
||||
|
@ -91,3 +91,4 @@ Still shows the glitch, actually very quickly.
|
||||
Changes made to test this:
|
||||
+ Try increasing the WAIT delay from 85 to 120
|
||||
(still an issue)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user