int unicode;
char const *name;
unsigned int flags;
-#define MOS 0x02 /* Mosaic graphics character */
+#define SEP 0x01 /* Separated graphics */
+#define MOS6 0x02 /* 6-cell mosaic graphics character */
#define MOS4 0x04 /* 4-cell mosaic graphics character */
+#define SEP6 (SEP | MOS6)
+#define SEP4 (SEP | MOS4)
char const *alias_of;
} const glyphs[] = {
/*
{{012,012,012,033,000,033,012,012,012}, 0x256c, "SF440000" },
/* Block elements */
- {{0x03}, 0x2580, "upblock", MOS4 }, {{0x23}, -1, "upblock.sep4", MOS4 },
- {{0x0c}, 0x2584, "dnblock", MOS4 }, {{0x2c}, -1, "dnblock.sep4", MOS4 },
- {{0x0f}, 0x2588, "block", MOS4 }, {{0x2f}, -1, "block.sep4", MOS4 },
- {{0x7f}, -1, "block.sep6", MOS },
- {{0x05}, 0x258c, "lfblock", MOS4 }, {{0x25}, -1, "lfblock.sep4", MOS4 },
- {{0x35}, -1, "lfblock.sep6", MOS },
- {{0x0a}, 0x2590, "rtblock", MOS4 }, {{0x2a}, -1, "rtblock.sep4", MOS4 },
- {{0x6a}, -1, "rtblock.sep6", MOS },
+ {{0x03}, 0x2580, "upblock", MOS4 }, {{0x03}, -1, "upblock.sep4", SEP4 },
+ {{0x0c}, 0x2584, "dnblock", MOS4 }, {{0x0c}, -1, "dnblock.sep4", SEP4 },
+ {{0x0f}, 0x2588, "block", MOS4 }, {{0x0f}, -1, "block.sep4", SEP4 },
+ {{0x3f}, -1, "block.sep6", SEP6 },
+ {{0x05}, 0x258c, "lfblock", MOS4 }, {{0x05}, -1, "lfblock.sep4", SEP4 },
+ {{0x15}, -1, "lfblock.sep6", SEP6 },
+ {{0x0a}, 0x2590, "rtblock", MOS4 }, {{0x0a}, -1, "rtblock.sep4", SEP4 },
+ {{0x2a}, -1, "rtblock.sep6", SEP6 },
{{025,000,012,000,025,000,012,000,025}, 0x2591, "ltshade" },
{{022,011,004,022,011,004,022,011,004}, 0x2592, "shade" },
{{025,037,012,037,025,037,012,037,025}, 0x2593, "dkshade" },
-#define M(x, u) { {(x)}, U(u), MOS }, { {(x)|0x20}, -1, "uni" #u ".sep4", MOS4 }
+#define M(x, u) { {x}, U(u), MOS6 }, { {x}, -1, "uni" #u ".sep4", SEP4 }
M( 4, 2596), M( 8, 2597), M( 1, 2598), M(13, 2599),
M( 9, 259A), M( 7, 259B), M(11, 259C), M( 2, 259D),
M( 6, 259E), M(14, 259F),
{{000,000,016,021,025,022,015,000,000}, U(A7AF) }, /* small cap Q */
/* Private use */
/* U+EE00--U+EE7F: zvbi mosaic graphics */
-#define M(x) {{0x##x}, U(EE##x), MOS}
+#define M(x) {{(0x##x & 0x1f)|((0x##x & 0x40)>>1)}, U(EE##x), \
+ (0x##x & 0x20 ? SEP6 : MOS6)}
M(00), M(01), M(02), M(03), M(04), M(05), M(06), M(07),
M(08), M(09), M(0A), M(0B), M(0C), M(0D), M(0E), M(0F),
M(10), M(11), M(12), M(13), M(14), M(15), M(16), M(17),
{{000,007,017,027,037,011,000,000,000}, U(1F69A) }, /* deliverytruck */
/* Graphics for legacy computing */
-#define M(x, u) { {(x)}, U(u), MOS }, { {(x)|0x20}, -1, "uni" #u ".sep6", MOS }
+#define M(x, u) { {x}, U(u), MOS6 }, { {x}, -1, "uni" #u ".sep6", SEP6 }
/* space */ M(0x01, 1FB00), M(0x02, 1FB01), M(0x03, 1FB02),
M(0x04, 1FB03), M(0x05, 1FB04), M(0x06, 1FB05), M(0x07, 1FB06),
M(0x08, 1FB07), M(0x09, 1FB08), M(0x0a, 1FB09), M(0x0b, 1FB0A),
M(0x14, 1FB13), /* lfblock */ M(0x16, 1FB14), M(0x17, 1FB15),
M(0x18, 1FB16), M(0x19, 1FB17), M(0x1a, 1FB18), M(0x1b, 1FB19),
M(0x1c, 1FB1A), M(0x1d, 1FB1B), M(0x1e, 1FB1C), M(0x1f, 1FB1D),
- M(0x40, 1FB1E), M(0x41, 1FB1F), M(0x42, 1FB20), M(0x43, 1FB21),
- M(0x44, 1FB22), M(0x45, 1FB23), M(0x46, 1FB24), M(0x47, 1FB25),
- M(0x48, 1FB26), M(0x49, 1FB27), /* rtblock */ M(0x4b, 1FB28),
- M(0x4c, 1FB29), M(0x4d, 1FB2A), M(0x4e, 1FB2B), M(0x4f, 1FB2C),
- M(0x50, 1FB2D), M(0x51, 1FB2E), M(0x52, 1FB2F), M(0x53, 1FB30),
- M(0x54, 1FB31), M(0x55, 1FB32), M(0x56, 1FB33), M(0x57, 1FB34),
- M(0x58, 1FB35), M(0x59, 1FB36), M(0x5a, 1FB37), M(0x5b, 1FB38),
- M(0x5c, 1FB39), M(0x5d, 1FB3A), M(0x5e, 1FB3B), /* block */
+ M(0x20, 1FB1E), M(0x21, 1FB1F), M(0x22, 1FB20), M(0x23, 1FB21),
+ M(0x24, 1FB22), M(0x25, 1FB23), M(0x26, 1FB24), M(0x27, 1FB25),
+ M(0x28, 1FB26), M(0x29, 1FB27), /* rtblock */ M(0x2b, 1FB28),
+ M(0x2c, 1FB29), M(0x2d, 1FB2A), M(0x2e, 1FB2B), M(0x2f, 1FB2C),
+ M(0x30, 1FB2D), M(0x31, 1FB2E), M(0x32, 1FB2F), M(0x33, 1FB30),
+ M(0x34, 1FB31), M(0x35, 1FB32), M(0x36, 1FB33), M(0x37, 1FB34),
+ M(0x38, 1FB35), M(0x39, 1FB36), M(0x3a, 1FB37), M(0x3b, 1FB38),
+ M(0x3c, 1FB39), M(0x3d, 1FB3A), M(0x3e, 1FB3B), /* block */
#undef M
{{030,024,022,021,027,030,000,000,000}, U(1FBB0) }, /* arrowheadptr */
{{000,012,033,000,033,012,000,000,000}, U(1FBBB) }, /* voided Greek cross */
glyphs[i].unicode != -1 ? glyphs[i].unicode :
0x110000 + extraglyphs++, glyphs[i].unicode, i);
printf("Width: %g\n", (double)(XSIZE * XPIX));
- if (glyphs[i].flags & (MOS|MOS4))
+ if (glyphs[i].flags & (MOS6|MOS4))
printf("Flags: W\n");
else
printf("Flags: HW\n");
dolookups(&glyphs[i]);
if (glyphs[i].alias_of != NULL)
doalias(glyphs[i].alias_of);
- else if (glyphs[i].flags & MOS)
+ else if (glyphs[i].flags & MOS6)
domosaic(glyphs[i].data[0],
- (glyphs[i].data[0] & 0x20) != 0);
+ (glyphs[i].flags & SEP) != 0);
else if (glyphs[i].flags & MOS4)
domosaic4(glyphs[i].data[0],
- (glyphs[i].data[0] & 0x20) != 0);
+ (glyphs[i].flags & SEP) != 0);
else {
if (plottermode)
dochar_plotter(glyphs[i].data, glyphs[i].flags);
while (g->alias_of != NULL)
g = get_glyph_by_name(g->alias_of);
- if (g->flags & MOS) return;
+ if (g->flags & (MOS6|MOS4)) return;
/*
* For proportional layout, we'd like a left side-bearing of
* one pixel, and a right side-bearing of zero. Space
if (code & 4) tile(0 + sep, 4 + sep, 3, 8);
if (code & 8) tile(3 + sep, 4 + sep, 6, 8);
if (code & 16) tile(0 + sep, 1 + sep, 3, 4);
- if (code & 64) tile(3 + sep, 1 + sep, 6, 4);
+ if (code & 32) tile(3 + sep, 1 + sep, 6, 4);
clean_path();
emit_path();
}