ref: f89c25789fc5e3ea793d417b8a6cf70f5a5c7740
dir: /main.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <memdraw.h>
#include "bitart.h"
#define NPIXELS 4032
#define H 32
#define W 126
#define NDRAWFUNCS 7
typedef int drawfunc(int x, int x);
int h, w;
void
usage(void)
{
sysfatal("usage: %s [ -f subfont ] text", argv0);
}
// unloadimage will replace data in the image
// so we build a new image as we unbuild the current one
// free the old image
// return the new image ptr
Memimage*
writeuncompressed(int fd, Memimage *m)
{
char chanstr[32];
int bpl, y, j;
uchar *buf;
Memimage *out;
Rectangle r;
out = allocmemimage(Rect(0, 0, w, h), GREY1);
if(chantostr(chanstr, m->chan) == nil)
sysfatal("can't convert channel descriptor: %r");
fprint(fd, "%11s %11d %11d %11d %11d ",
chanstr, m->r.min.x, m->r.min.y, m->r.max.x, m->r.max.y);
bpl = bytesperline(m->r, m->depth);
buf = malloc(bpl);
if(buf == nil)
sysfatal("malloc failed: %r");
for(y=m->r.min.y; y<m->r.max.y; y++){
r = Rect(m->r.min.x, y, m->r.max.x, y+1);
j = unloadmemimage(m, r, buf, bpl);
loadmemimage(out, r, buf, bpl);
if(j != bpl)
sysfatal("image unload failed → %r");
if(write(fd, buf, bpl) != bpl)
sysfatal("wu write failed → %r");
}
free(buf);
freememimage(m);
return out;
}
int
ob0(int x, int y)
{
return ((-((-y) ^ (-x))) % (-((x - y) / (x / x)))) % 12;
}
int
ob1(int x, int y)
{
return ((-((y^23)|(x%2)))-(((~y)*(~y))%((-x)+(y*x))))%7;
}
int
ob2(int x, int y)
{
return ((-((x+23)-(-x)))%(~(~(14-y))))%6;
}
int
ob3(int x, int y)
{
return ((-(-(x|x)))%(((-x)^(y+x))/((y/x)-(x^x))))%3;
}
int
ob4(int x, int y)
{
return (((~(x/y))*(-(-y)))-(-((y-y)|(-x))))%11;
}
int
ob5(int x, int y)
{
return (((-(y|y))/((-y)+(y&x)))/(((y*y)&(~x))+((x/y)&(13&x))))%4;
}
int
drand(int, int)
{
return ntruerand(2);
}
void
main(int argc, char **argv)
{
Memimage *img;
# 126 x 32 oled ⇒ 4032 pixels
int i;
h = 32;
w = 126;
long ms;
ms = 100;
//Point topleft;
//double angle;
//angle = 0.0;
Rectangle pixel;
pixel.min.x = -1;
pixel.min.y = 1;
pixel.max.y = 2;
pixel.max.x = 2;
char *path;
path = "/mnt/reform/kbdoled";
//u8int fb[H][W]; // framebuffer
drawfunc *tab[NDRAWFUNCS] = {
ob0,
ob1,//general kenobi! *growls* << "hello there"
ob2,
ob3,
ob4,
ob5,
drand,
};
Rectangle r;
int fd;
ARGBEGIN{
default:
usage();
}ARGEND;
if (memimageinit())
sysfatal("memimageinit failed: %r");
for(i = 0;; i++){
if(i >= NDRAWFUNCS)
i = 0;
print("i=%d\n", i);
// clear rectangle brush position
r.min.x = 0;
r.min.y = 0;
r.max.x = 1;
r.max.y = 1;
// clear the screen
img = allocmemimage(Rect(0, 0, w, h), GREY1);
if (!img)
sysfatal("cannot allocate memimage: %r");
memfillcolor(img, DBlack);
/* call the independent drawing routine of choice */
//angle = truerand();
int y, x;
for(y = 0; y < h; y++){
fd = open(path, OWRITE);
if(fd < 0){
sysfatal("could not open kbdoled file → %r");
}
for(x = 0; x < w; x++){
Memimage *todraw = memblack;
if(tab[i](x, y))
todraw = memwhite;
r.min.x = x;
r.min.y = y;
r.max.x = r.min.x+1;
r.max.y = r.min.y+1;
memimagedraw(img, r, todraw, ZP, nil, ZP, SoverD);
}
img = writeuncompressed(fd, img);
// flush
fd = close(fd);
if(fd < 0)
sysfatal("close failed → %r");
sleep(ms);
}
freememimage(img);
sleep(ms);
}
}