Blame projects/neural/font.inc.cpp

Ivan Mahonin b579b3
#ifndef FONT_INC_CPP
Ivan Mahonin b579b3
#define FONT_INC_CPP
Ivan Mahonin b579b3
Ivan Mahonin b579b3
#include <cstdio>
Ivan Mahonin b579b3
#include <cstdarg>
Ivan Mahonin b579b3
#include <cstring>
Ivan Mahonin b579b3
Ivan Mahonin b579b3
#include "font.data.inc.cpp"
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
void imgPrint(unsigned char *data, int w, int h, int ch, int x, int y, const unsigned char *color, const char *text) {
Ivan Mahonin b579b3
  int x0 = x;
Ivan Mahonin b579b3
  while(unsigned char c = (unsigned char)*text++) {
Ivan Mahonin b579b3
    if (c == '\n') { x = x0; y += 8; continue; }
Ivan Mahonin b579b3
    const unsigned char *sym = font8x8data[c];
Ivan Mahonin b579b3
    for(int yy = y, ey = y + 8; yy < ey; ++yy, ++sym) {
Ivan Mahonin b579b3
      if (yy >= 0 && yy < h) {
Ivan Mahonin b579b3
        unsigned char row = *sym;
Ivan Mahonin b579b3
        for(int xx = x; row; ++xx, row >>= 1)
Ivan Mahonin b579b3
          if ((row & 1) && xx >= 0 && xx <= w)
Ivan Mahonin b579b3
            memcpy(data + (yy*w + xx)*ch, color, ch);
Ivan Mahonin b579b3
      }
Ivan Mahonin b579b3
    }
Ivan Mahonin b579b3
    x += 8;
Ivan Mahonin b579b3
  }
Ivan Mahonin b579b3
}
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
void imgPrintf(unsigned char *data, int w, int h, int ch, int x, int y, const unsigned char *color, const char *format, ...) {
Ivan Mahonin b579b3
  char buf[1024] = {};
Ivan Mahonin b579b3
  va_list args;
Ivan Mahonin b579b3
  va_start(args, format);
Ivan Mahonin b579b3
  vsnprintf(buf, sizeof(buf),format, args);
Ivan Mahonin b579b3
  va_end(args);
Ivan Mahonin b579b3
  imgPrint(data, w, h, ch, x, y, color, buf);
Ivan Mahonin b579b3
}
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
Ivan Mahonin b579b3
#endif
Ivan Mahonin b579b3