mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-06 19:28:29 +00:00
Add maxmind demo to redbean-demo.com
This commit is contained in:
parent
c4d8f40422
commit
c541225af0
9 changed files with 355 additions and 30 deletions
|
@ -731,19 +731,19 @@ static bool ChunkEq(struct TtyRgb c[hasatleast 4],
|
|||
}
|
||||
|
||||
static struct TtyRgb *CopyChunk(struct TtyRgb chunk[hasatleast 4],
|
||||
const struct TtyRgb *c, size_t n) {
|
||||
chunk[TL] = c[0 + 0];
|
||||
chunk[TR] = c[0 + 1];
|
||||
chunk[BL] = c[n + 0];
|
||||
chunk[BR] = c[n + 1];
|
||||
const struct TtyRgb *c, size_t xn) {
|
||||
chunk[TL] = c[00 + 0];
|
||||
chunk[TR] = c[00 + 1];
|
||||
chunk[BL] = c[xn + 0];
|
||||
chunk[BR] = c[xn + 1];
|
||||
return chunk;
|
||||
}
|
||||
|
||||
static dontinline char *CopyRun(char *v, size_t n,
|
||||
struct TtyRgb lastchunk[hasatleast 4],
|
||||
const struct TtyRgb **c, size_t *x,
|
||||
struct TtyRgb *bg, struct TtyRgb *fg,
|
||||
struct Glyph *glyph) {
|
||||
struct TtyRgb lastchunk[hasatleast 4],
|
||||
const struct TtyRgb **c, size_t *x,
|
||||
struct TtyRgb *bg, struct TtyRgb *fg,
|
||||
struct Glyph *glyph) {
|
||||
struct TtyRgb chunk[4];
|
||||
if (memcmp(glyph, &kGlyphs[1][0], sizeof(*glyph)) == 0) {
|
||||
if (!ttyeq(*bg, *fg)) {
|
||||
|
@ -766,17 +766,18 @@ static dontinline char *CopyRun(char *v, size_t n,
|
|||
/**
|
||||
* Maps 2×2 pixel chunks onto ANSI UNICODE cells.
|
||||
* @note h/t Nick Black for his quadrant blitting work on notcurses
|
||||
* @note yn and xn need to be even
|
||||
*/
|
||||
char *ttyraster(char *v, const struct TtyRgb *c, size_t yn, size_t n,
|
||||
char *ttyraster(char *v, const struct TtyRgb *c, size_t yn, size_t xn,
|
||||
struct TtyRgb bg, struct TtyRgb fg) {
|
||||
unsigned y, x;
|
||||
struct Pick p;
|
||||
struct Glyph glyph;
|
||||
struct TtyRgb chun[4], lastchunk[4];
|
||||
for (y = 0; y < yn; y += 2, c += n) {
|
||||
for (y = 0; y < yn; y += 2, c += xn) {
|
||||
if (y) *v++ = '\r', *v++ = '\n';
|
||||
for (x = 0; x < n; x += 2, c += 2) {
|
||||
CopyChunk(chun, c, n);
|
||||
for (x = 0; x < xn; x += 2, c += 2) {
|
||||
CopyChunk(chun, c, xn);
|
||||
if (ttyquant()->alg == kTtyQuantTrue) {
|
||||
if (ttyquant()->blocks == kTtyBlocksCp437) {
|
||||
p = PickBlockCp437True(chun[TL], chun[TR], chun[BL], chun[BR]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue