-l and -h options

This commit is contained in:
kraus 2022-11-20 16:45:21 +01:00
parent 58ad8f58e2
commit 67e0003eef
2 changed files with 339 additions and 17 deletions

View File

@ -26,11 +26,11 @@ test:
.bmf.png:
./bmf2bdf $< > $*.bdf
- ../bdfconv/bdfconv -f 1 -v $*.bdf -n $* -d ../bdf/7x14.bdf -a -t
- ../bdfconv/bdfconv -f 1 -v -m '32-10000' $*.bdf -n $* -d ../bdf/7x14.bdf -a -t
- convert -trim -flip bdf.tga $@
- rm bdf.tga
./bmf2bdf -p $< > $*-p.bdf
- ../bdfconv/bdfconv -f 1 -v $*-p.bdf -n $*-p -d ../bdf/7x14.bdf -a -t
./bmf2bdf -p -x 0 -y 0 -l 127 $< > $*-p.bdf
- ../bdfconv/bdfconv -f 1 -v -m '32-10000' $*-p.bdf -n $*-p -d ../bdf/7x14.bdf -a -t
- convert -trim -flip bdf.tga $*-p.png
- rm bdf.tga

View File

@ -33,6 +33,20 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Features
- Convert .bmf to .bdf
- Converts DOS codepage to Unicode
- Convert monospaced proportional font back to none-monospaced font (-p)
- Optional glyph spacing with -x
- Optional baseline adjustment with -y
Example:
http://bmf.php5.cz/index.php?font=goth16
bmf2bdf -p -y -2 goth16.bmf
or
bmf2bdf -p -x 1 -y -2 goth16.bmf
*/
#include <stdio.h>
#include <stdint.h>
@ -55,12 +69,27 @@ FILE *bdf_fp = NULL;
int optionForceProportional = 0;
/*
option "-x"
option "-x #"
default: Do not add any extra space
"-x": Add one pixel extra space between chars, might be useful for -p
"-x #": Add # pixel extra space between chars, might be useful for -p
*/
int optionAddExtraSpace = 0;
/*
option "-y #"
default: Do not shift chars vertically
"-y #": Vertical shift of all glyphs (useful to adjust baseline, # can be negative);
*/
int optionShiftY = 0;
/*
options "-l #" "-h #"
default: 0 ... 255
Specified the low and high gray color range for pixel which should appear as set.
*/
int optionGrayLow = 0;
int optionGrayHigh = 255;
int16_t lineHeight;
int16_t sizeOver;
int16_t sizeUnder;
@ -79,6 +108,7 @@ uint8_t palette[256*3];
char title[256+2];
int8_t tablo[5];
uint8_t bitmap[256*256];
uint32_t dos2unicode[256];
int totalGlyphSize = 0;
int cntGlyphSize = 0;
@ -108,6 +138,7 @@ void write_bdf_header(void)
uint8_t get_pixel(int x, int y)
{
int width, height;
int intensity;
uint16_t idx;
width = (uint8_t)tablo[0];
height = (uint8_t)tablo[1];
@ -120,12 +151,14 @@ uint8_t get_pixel(int x, int y)
if ( y >= height )
return 0;
idx = bitmap[x+y*width];
//uint8_t intensity = (palette[(idx-1)*3]+palette[(idx-1)*3+1]+palette[(idx-1)*3+2])/3;
if ( idx == 0 )
return 0;
return 1;
intensity = (palette[(idx-1)*3]+palette[(idx-1)*3+1]+palette[(idx-1)*3+2])/3;
if ( intensity >= optionGrayLow && intensity <= optionGrayHigh )
return 1;
return 0;
}
uint8_t get_pixel_byte(int x, int y)
@ -174,8 +207,7 @@ void write_bdf_bitmap(uint32_t encoding)
else
dwidth = width + relx + addSpace;
}
if ( optionAddExtraSpace )
dwidth++;
dwidth+=optionAddExtraSpace;
if ( bdf_fp == NULL )
return;
@ -185,7 +217,7 @@ void write_bdf_bitmap(uint32_t encoding)
fprintf(bdf_fp, "DWIDTH %d 0\n", dwidth);
//fprintf(bdf_fp, "BBX %d %d %d %d\n", width, height, relx, sizeOver+rely);
fprintf(bdf_fp, "BBX %d %d %d %d\n",
width, height, relx, -(sizeOver+height+rely));
width, height, relx, -(sizeOver+height+rely)+optionShiftY);
fprintf(bdf_fp, "BITMAP\n");
for( y = 0; y < height; y++ )
@ -321,7 +353,7 @@ int processBMF(const char *filename, int isAnalyze)
}
else
{
write_bdf_bitmap(whichChar);
write_bdf_bitmap(dos2unicode[whichChar]);
}
}
/*
@ -346,11 +378,280 @@ int processBMF(const char *filename, int isAnalyze)
return 1;
}
void initDos2Unicode(void)
{
dos2unicode[0x00]=0x0000; //NULL
dos2unicode[0x01]=0x263A; //START OF HEADING
dos2unicode[0x02]=0x263B; //START OF TEXT
dos2unicode[0x03]=0x2665; //END OF TEXT
dos2unicode[0x04]=0x2666; //END OF TRANSMISSION
dos2unicode[0x05]=0x2663; //ENQUIRY
dos2unicode[0x06]=0x2660; //ACKNOWLEDGE
dos2unicode[0x07]=0x2022; //BELL
dos2unicode[0x08]=0x25D8; //BACKSPACE
dos2unicode[0x09]=0x25CB; //HORIZONTAL TABULATION
dos2unicode[0x0a]=0x25D9; //LINE FEED
dos2unicode[0x0b]=0x2642; //VERTICAL TABULATION
dos2unicode[0x0c]=0x2640; //FORM FEED
dos2unicode[0x0d]=0x266A; //CARRIAGE RETURN
dos2unicode[0x0e]=0x266B; //SHIFT OUT
dos2unicode[0x0f]=0x263C; //SHIFT IN
dos2unicode[0x10]=0x25BA; //DATA LINK ESCAPE
dos2unicode[0x11]=0x25C4; //DEVICE CONTROL ONE
dos2unicode[0x12]=0x2195; //DEVICE CONTROL TWO
dos2unicode[0x13]=0x203C; //DEVICE CONTROL THREE
dos2unicode[0x14]=0x00B6; //DEVICE CONTROL FOUR
dos2unicode[0x15]=0x00A7; //NEGATIVE ACKNOWLEDGE
dos2unicode[0x16]=0x25AC; //SYNCHRONOUS IDLE
dos2unicode[0x17]=0x21A8; //END OF TRANSMISSION BLOCK
dos2unicode[0x18]=0x2191; //CANCEL
dos2unicode[0x19]=0x2192; //END OF MEDIUM
dos2unicode[0x1a]=0x2190; //SUBSTITUTE
dos2unicode[0x1b]=0x221F; //ESCAPE
dos2unicode[0x1c]=0x2194; //FILE SEPARATOR
dos2unicode[0x1d]=0x25B2; //GROUP SEPARATOR
dos2unicode[0x1e]=0x25BC; //RECORD SEPARATOR
dos2unicode[0x1f]=0x001f; //UNIT SEPARATOR
dos2unicode[0x20]=0x0020; //SPACE
dos2unicode[0x21]=0x0021; //EXCLAMATION MARK
dos2unicode[0x22]=0x0022; //QUOTATION MARK
dos2unicode[0x23]=0x0023; //NUMBER SIGN
dos2unicode[0x24]=0x0024; //DOLLAR SIGN
dos2unicode[0x25]=0x0025; //PERCENT SIGN
dos2unicode[0x26]=0x0026; //AMPERSAND
dos2unicode[0x27]=0x0027; //APOSTROPHE
dos2unicode[0x28]=0x0028; //LEFT PARENTHESIS
dos2unicode[0x29]=0x0029; //RIGHT PARENTHESIS
dos2unicode[0x2a]=0x002a; //ASTERISK
dos2unicode[0x2b]=0x002b; //PLUS SIGN
dos2unicode[0x2c]=0x002c; //COMMA
dos2unicode[0x2d]=0x002d; //HYPHEN-MINUS
dos2unicode[0x2e]=0x002e; //FULL STOP
dos2unicode[0x2f]=0x002f; //SOLIDUS
dos2unicode[0x30]=0x0030; //DIGIT ZERO
dos2unicode[0x31]=0x0031; //DIGIT ONE
dos2unicode[0x32]=0x0032; //DIGIT TWO
dos2unicode[0x33]=0x0033; //DIGIT THREE
dos2unicode[0x34]=0x0034; //DIGIT FOUR
dos2unicode[0x35]=0x0035; //DIGIT FIVE
dos2unicode[0x36]=0x0036; //DIGIT SIX
dos2unicode[0x37]=0x0037; //DIGIT SEVEN
dos2unicode[0x38]=0x0038; //DIGIT EIGHT
dos2unicode[0x39]=0x0039; //DIGIT NINE
dos2unicode[0x3a]=0x003a; //COLON
dos2unicode[0x3b]=0x003b; //SEMICOLON
dos2unicode[0x3c]=0x003c; //LESS-THAN SIGN
dos2unicode[0x3d]=0x003d; //EQUALS SIGN
dos2unicode[0x3e]=0x003e; //GREATER-THAN SIGN
dos2unicode[0x3f]=0x003f; //QUESTION MARK
dos2unicode[0x40]=0x0040; //COMMERCIAL AT
dos2unicode[0x41]=0x0041; //LATIN CAPITAL LETTER A
dos2unicode[0x42]=0x0042; //LATIN CAPITAL LETTER B
dos2unicode[0x43]=0x0043; //LATIN CAPITAL LETTER C
dos2unicode[0x44]=0x0044; //LATIN CAPITAL LETTER D
dos2unicode[0x45]=0x0045; //LATIN CAPITAL LETTER E
dos2unicode[0x46]=0x0046; //LATIN CAPITAL LETTER F
dos2unicode[0x47]=0x0047; //LATIN CAPITAL LETTER G
dos2unicode[0x48]=0x0048; //LATIN CAPITAL LETTER H
dos2unicode[0x49]=0x0049; //LATIN CAPITAL LETTER I
dos2unicode[0x4a]=0x004a; //LATIN CAPITAL LETTER J
dos2unicode[0x4b]=0x004b; //LATIN CAPITAL LETTER K
dos2unicode[0x4c]=0x004c; //LATIN CAPITAL LETTER L
dos2unicode[0x4d]=0x004d; //LATIN CAPITAL LETTER M
dos2unicode[0x4e]=0x004e; //LATIN CAPITAL LETTER N
dos2unicode[0x4f]=0x004f; //LATIN CAPITAL LETTER O
dos2unicode[0x50]=0x0050; //LATIN CAPITAL LETTER P
dos2unicode[0x51]=0x0051; //LATIN CAPITAL LETTER Q
dos2unicode[0x52]=0x0052; //LATIN CAPITAL LETTER R
dos2unicode[0x53]=0x0053; //LATIN CAPITAL LETTER S
dos2unicode[0x54]=0x0054; //LATIN CAPITAL LETTER T
dos2unicode[0x55]=0x0055; //LATIN CAPITAL LETTER U
dos2unicode[0x56]=0x0056; //LATIN CAPITAL LETTER V
dos2unicode[0x57]=0x0057; //LATIN CAPITAL LETTER W
dos2unicode[0x58]=0x0058; //LATIN CAPITAL LETTER X
dos2unicode[0x59]=0x0059; //LATIN CAPITAL LETTER Y
dos2unicode[0x5a]=0x005a; //LATIN CAPITAL LETTER Z
dos2unicode[0x5b]=0x005b; //LEFT SQUARE BRACKET
dos2unicode[0x5c]=0x005c; //REVERSE SOLIDUS
dos2unicode[0x5d]=0x005d; //RIGHT SQUARE BRACKET
dos2unicode[0x5e]=0x005e; //CIRCUMFLEX ACCENT
dos2unicode[0x5f]=0x005f; //LOW LINE
dos2unicode[0x60]=0x0060; //GRAVE ACCENT
dos2unicode[0x61]=0x0061; //LATIN SMALL LETTER A
dos2unicode[0x62]=0x0062; //LATIN SMALL LETTER B
dos2unicode[0x63]=0x0063; //LATIN SMALL LETTER C
dos2unicode[0x64]=0x0064; //LATIN SMALL LETTER D
dos2unicode[0x65]=0x0065; //LATIN SMALL LETTER E
dos2unicode[0x66]=0x0066; //LATIN SMALL LETTER F
dos2unicode[0x67]=0x0067; //LATIN SMALL LETTER G
dos2unicode[0x68]=0x0068; //LATIN SMALL LETTER H
dos2unicode[0x69]=0x0069; //LATIN SMALL LETTER I
dos2unicode[0x6a]=0x006a; //LATIN SMALL LETTER J
dos2unicode[0x6b]=0x006b; //LATIN SMALL LETTER K
dos2unicode[0x6c]=0x006c; //LATIN SMALL LETTER L
dos2unicode[0x6d]=0x006d; //LATIN SMALL LETTER M
dos2unicode[0x6e]=0x006e; //LATIN SMALL LETTER N
dos2unicode[0x6f]=0x006f; //LATIN SMALL LETTER O
dos2unicode[0x70]=0x0070; //LATIN SMALL LETTER P
dos2unicode[0x71]=0x0071; //LATIN SMALL LETTER Q
dos2unicode[0x72]=0x0072; //LATIN SMALL LETTER R
dos2unicode[0x73]=0x0073; //LATIN SMALL LETTER S
dos2unicode[0x74]=0x0074; //LATIN SMALL LETTER T
dos2unicode[0x75]=0x0075; //LATIN SMALL LETTER U
dos2unicode[0x76]=0x0076; //LATIN SMALL LETTER V
dos2unicode[0x77]=0x0077; //LATIN SMALL LETTER W
dos2unicode[0x78]=0x0078; //LATIN SMALL LETTER X
dos2unicode[0x79]=0x0079; //LATIN SMALL LETTER Y
dos2unicode[0x7a]=0x007a; //LATIN SMALL LETTER Z
dos2unicode[0x7b]=0x007b; //LEFT CURLY BRACKET
dos2unicode[0x7c]=0x007c; //VERTICAL LINE
dos2unicode[0x7d]=0x007d; //RIGHT CURLY BRACKET
dos2unicode[0x7e]=0x007e; //TILDE
dos2unicode[0x7f]=0x007f; //DELETE
dos2unicode[0x80]=0x00c7; //LATIN CAPITAL LETTER C WITH CEDILLA
dos2unicode[0x81]=0x00fc; //LATIN SMALL LETTER U WITH DIAERESIS
dos2unicode[0x82]=0x00e9; //LATIN SMALL LETTER E WITH ACUTE
dos2unicode[0x83]=0x00e2; //LATIN SMALL LETTER A WITH CIRCUMFLEX
dos2unicode[0x84]=0x00e4; //LATIN SMALL LETTER A WITH DIAERESIS
dos2unicode[0x85]=0x00e0; //LATIN SMALL LETTER A WITH GRAVE
dos2unicode[0x86]=0x00e5; //LATIN SMALL LETTER A WITH RING ABOVE
dos2unicode[0x87]=0x00e7; //LATIN SMALL LETTER C WITH CEDILLA
dos2unicode[0x88]=0x00ea; //LATIN SMALL LETTER E WITH CIRCUMFLEX
dos2unicode[0x89]=0x00eb; //LATIN SMALL LETTER E WITH DIAERESIS
dos2unicode[0x8a]=0x00e8; //LATIN SMALL LETTER E WITH GRAVE
dos2unicode[0x8b]=0x00ef; //LATIN SMALL LETTER I WITH DIAERESIS
dos2unicode[0x8c]=0x00ee; //LATIN SMALL LETTER I WITH CIRCUMFLEX
dos2unicode[0x8d]=0x00ec; //LATIN SMALL LETTER I WITH GRAVE
dos2unicode[0x8e]=0x00c4; //LATIN CAPITAL LETTER A WITH DIAERESIS
dos2unicode[0x8f]=0x00c5; //LATIN CAPITAL LETTER A WITH RING ABOVE
dos2unicode[0x90]=0x00c9; //LATIN CAPITAL LETTER E WITH ACUTE
dos2unicode[0x91]=0x00e6; //LATIN SMALL LIGATURE AE
dos2unicode[0x92]=0x00c6; //LATIN CAPITAL LIGATURE AE
dos2unicode[0x93]=0x00f4; //LATIN SMALL LETTER O WITH CIRCUMFLEX
dos2unicode[0x94]=0x00f6; //LATIN SMALL LETTER O WITH DIAERESIS
dos2unicode[0x95]=0x00f2; //LATIN SMALL LETTER O WITH GRAVE
dos2unicode[0x96]=0x00fb; //LATIN SMALL LETTER U WITH CIRCUMFLEX
dos2unicode[0x97]=0x00f9; //LATIN SMALL LETTER U WITH GRAVE
dos2unicode[0x98]=0x00ff; //LATIN SMALL LETTER Y WITH DIAERESIS
dos2unicode[0x99]=0x00d6; //LATIN CAPITAL LETTER O WITH DIAERESIS
dos2unicode[0x9a]=0x00dc; //LATIN CAPITAL LETTER U WITH DIAERESIS
dos2unicode[0x9b]=0x00a2; //CENT SIGN
dos2unicode[0x9c]=0x00a3; //POUND SIGN
dos2unicode[0x9d]=0x00a5; //YEN SIGN
dos2unicode[0x9e]=0x20a7; //PESETA SIGN
dos2unicode[0x9f]=0x0192; //LATIN SMALL LETTER F WITH HOOK
dos2unicode[0xa0]=0x00e1; //LATIN SMALL LETTER A WITH ACUTE
dos2unicode[0xa1]=0x00ed; //LATIN SMALL LETTER I WITH ACUTE
dos2unicode[0xa2]=0x00f3; //LATIN SMALL LETTER O WITH ACUTE
dos2unicode[0xa3]=0x00fa; //LATIN SMALL LETTER U WITH ACUTE
dos2unicode[0xa4]=0x00f1; //LATIN SMALL LETTER N WITH TILDE
dos2unicode[0xa5]=0x00d1; //LATIN CAPITAL LETTER N WITH TILDE
dos2unicode[0xa6]=0x00aa; //FEMININE ORDINAL INDICATOR
dos2unicode[0xa7]=0x00ba; //MASCULINE ORDINAL INDICATOR
dos2unicode[0xa8]=0x00bf; //INVERTED QUESTION MARK
dos2unicode[0xa9]=0x2310; //REVERSED NOT SIGN
dos2unicode[0xaa]=0x00ac; //NOT SIGN
dos2unicode[0xab]=0x00bd; //VULGAR FRACTION ONE HALF
dos2unicode[0xac]=0x00bc; //VULGAR FRACTION ONE QUARTER
dos2unicode[0xad]=0x00a1; //INVERTED EXCLAMATION MARK
dos2unicode[0xae]=0x00ab; //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
dos2unicode[0xaf]=0x00bb; //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
dos2unicode[0xb0]=0x2591; //LIGHT SHADE
dos2unicode[0xb1]=0x2592; //MEDIUM SHADE
dos2unicode[0xb2]=0x2593; //DARK SHADE
dos2unicode[0xb3]=0x2502; //BOX DRAWINGS LIGHT VERTICAL
dos2unicode[0xb4]=0x2524; //BOX DRAWINGS LIGHT VERTICAL AND LEFT
dos2unicode[0xb5]=0x2561; //BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
dos2unicode[0xb6]=0x2562; //BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
dos2unicode[0xb7]=0x2556; //BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
dos2unicode[0xb8]=0x2555; //BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
dos2unicode[0xb9]=0x2563; //BOX DRAWINGS DOUBLE VERTICAL AND LEFT
dos2unicode[0xba]=0x2551; //BOX DRAWINGS DOUBLE VERTICAL
dos2unicode[0xbb]=0x2557; //BOX DRAWINGS DOUBLE DOWN AND LEFT
dos2unicode[0xbc]=0x255d; //BOX DRAWINGS DOUBLE UP AND LEFT
dos2unicode[0xbd]=0x255c; //BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
dos2unicode[0xbe]=0x255b; //BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
dos2unicode[0xbf]=0x2510; //BOX DRAWINGS LIGHT DOWN AND LEFT
dos2unicode[0xc0]=0x2514; //BOX DRAWINGS LIGHT UP AND RIGHT
dos2unicode[0xc1]=0x2534; //BOX DRAWINGS LIGHT UP AND HORIZONTAL
dos2unicode[0xc2]=0x252c; //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
dos2unicode[0xc3]=0x251c; //BOX DRAWINGS LIGHT VERTICAL AND RIGHT
dos2unicode[0xc4]=0x2500; //BOX DRAWINGS LIGHT HORIZONTAL
dos2unicode[0xc5]=0x253c; //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
dos2unicode[0xc6]=0x255e; //BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
dos2unicode[0xc7]=0x255f; //BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
dos2unicode[0xc8]=0x255a; //BOX DRAWINGS DOUBLE UP AND RIGHT
dos2unicode[0xc9]=0x2554; //BOX DRAWINGS DOUBLE DOWN AND RIGHT
dos2unicode[0xca]=0x2569; //BOX DRAWINGS DOUBLE UP AND HORIZONTAL
dos2unicode[0xcb]=0x2566; //BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
dos2unicode[0xcc]=0x2560; //BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
dos2unicode[0xcd]=0x2550; //BOX DRAWINGS DOUBLE HORIZONTAL
dos2unicode[0xce]=0x256c; //BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
dos2unicode[0xcf]=0x2567; //BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
dos2unicode[0xd0]=0x2568; //BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
dos2unicode[0xd1]=0x2564; //BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
dos2unicode[0xd2]=0x2565; //BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
dos2unicode[0xd3]=0x2559; //BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
dos2unicode[0xd4]=0x2558; //BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
dos2unicode[0xd5]=0x2552; //BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
dos2unicode[0xd6]=0x2553; //BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
dos2unicode[0xd7]=0x256b; //BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
dos2unicode[0xd8]=0x256a; //BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
dos2unicode[0xd9]=0x2518; //BOX DRAWINGS LIGHT UP AND LEFT
dos2unicode[0xda]=0x250c; //BOX DRAWINGS LIGHT DOWN AND RIGHT
dos2unicode[0xdb]=0x2588; //FULL BLOCK
dos2unicode[0xdc]=0x2584; //LOWER HALF BLOCK
dos2unicode[0xdd]=0x258c; //LEFT HALF BLOCK
dos2unicode[0xde]=0x2590; //RIGHT HALF BLOCK
dos2unicode[0xdf]=0x2580; //UPPER HALF BLOCK
dos2unicode[0xe0]=0x03b1; //GREEK SMALL LETTER ALPHA
dos2unicode[0xe1]=0x00df; //LATIN SMALL LETTER SHARP S
dos2unicode[0xe2]=0x0393; //GREEK CAPITAL LETTER GAMMA
dos2unicode[0xe3]=0x03c0; //GREEK SMALL LETTER PI
dos2unicode[0xe4]=0x03a3; //GREEK CAPITAL LETTER SIGMA
dos2unicode[0xe5]=0x03c3; //GREEK SMALL LETTER SIGMA
dos2unicode[0xe6]=0x00b5; //MICRO SIGN
dos2unicode[0xe7]=0x03c4; //GREEK SMALL LETTER TAU
dos2unicode[0xe8]=0x03a6; //GREEK CAPITAL LETTER PHI
dos2unicode[0xe9]=0x0398; //GREEK CAPITAL LETTER THETA
dos2unicode[0xea]=0x03a9; //GREEK CAPITAL LETTER OMEGA
dos2unicode[0xeb]=0x03b4; //GREEK SMALL LETTER DELTA
dos2unicode[0xec]=0x221e; //INFINITY
dos2unicode[0xed]=0x03c6; //GREEK SMALL LETTER PHI
dos2unicode[0xee]=0x03b5; //GREEK SMALL LETTER EPSILON
dos2unicode[0xef]=0x2229; //INTERSECTION
dos2unicode[0xf0]=0x2261; //IDENTICAL TO
dos2unicode[0xf1]=0x00b1; //PLUS-MINUS SIGN
dos2unicode[0xf2]=0x2265; //GREATER-THAN OR EQUAL TO
dos2unicode[0xf3]=0x2264; //LESS-THAN OR EQUAL TO
dos2unicode[0xf4]=0x2320; //TOP HALF INTEGRAL
dos2unicode[0xf5]=0x2321; //BOTTOM HALF INTEGRAL
dos2unicode[0xf6]=0x00f7; //DIVISION SIGN
dos2unicode[0xf7]=0x2248; //ALMOST EQUAL TO
dos2unicode[0xf8]=0x00b0; //DEGREE SIGN
dos2unicode[0xf9]=0x2219; //BULLET OPERATOR
dos2unicode[0xfa]=0x00b7; //MIDDLE DOT
dos2unicode[0xfb]=0x221a; //SQUARE ROOT
dos2unicode[0xfc]=0x207f; //SUPERSCRIPT LATIN SMALL LETTER N
dos2unicode[0xfd]=0x00b2; //SUPERSCRIPT TWO
dos2unicode[0xfe]=0x25a0; //BLACK SQUARE
dos2unicode[0xff]=0x00a0; //NO-BREAK SPACE
}
void help(void)
{
puts("bmf2bdf [options] <file.bmf>");
puts(" -p Ignore the BMF shift value and try to recalculate it (creates a proportional font)");
puts(" -x Add one pixel of extra space after each glyph (increases DWIDTH by one)");
puts("Options:");
puts(" -l # Lower edge of the gray level range which maps bmf colors to black (0..255, defaults to 0)");
puts(" -h # Upper edge of the gray level range which maps bmf colors to black (0..255, defaults to 255)");
puts(" -p Ignore the BMF shift value and try to recalculate it (creates a proportional font)");
puts(" -x # Add # pixel of extra space after each glyph (increases DWIDTH by one, defaults to 0)");
puts(" -y # Shift all glyphs by # pixel (# can be negative)");
puts("Tips:");
puts(" Use '-x 1' to increase the gap between chars.");
puts(" Use '-l 127' to get an improved color mapping for multicolor .bmf fonts.");
puts(" Use '-p' for monospaced .bmf fonts which seem to be proportional fonts.");
}
int main(int argc, char **argv)
@ -377,7 +678,27 @@ int main(int argc, char **argv)
}
else if ( strcmp(*argv, "-x") == 0 )
{
optionAddExtraSpace = 1;
argv++;
argc--;
optionAddExtraSpace = atoi(*argv);
}
else if ( strcmp(*argv, "-y") == 0 )
{
argv++;
argc--;
optionShiftY = atoi(*argv);
}
else if ( strcmp(*argv, "-l") == 0 )
{
argv++;
argc--;
optionGrayLow = atoi(*argv);
}
else if ( strcmp(*argv, "-h") == 0 )
{
argv++;
argc--;
optionGrayHigh = atoi(*argv);
}
else
{
@ -387,10 +708,11 @@ int main(int argc, char **argv)
argv++;
argc--;
}
if ( bmf_name != NULL )
{
initDos2Unicode();
processBMF(bmf_name, 1);
processBMF(bmf_name, 0);
}