ref: 0e8796746fad950ab61be075de5638fdcbd6fc32
dir: /blie.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <memdraw.h>
#include <event.h>
#include <bio.h>
#include "blie.h"
void
usage(void)
{
fprint(2, "usage: %s [-cd] dir\n", argv0);
exits(nil);
}
int bliedebug = 0;
char Nlayers[] = "layers";
char *root = nil;
int
loadfile(void)
{
Biobuf *b;
int fd;
char *s;
b = Bopen(Nlayers, OREAD);
if (!b) {
fd = create(Nlayers, OREAD, 0666);
close(fd);
b = Bopen(Nlayers, OREAD);
}
if (!b)
sysfatal("unable to open layers file: %r");
while (s = Brdstr(b, '\n', 1))
addlayer(s);
return 1;
}
static void
docomp(Layer *l, int id, void *aux)
{
int i;
Memimage **img = (Memimage**)aux;
Editor *ed = l->editor;
i = (id + 1)%2;
if (bliedebug)
fprint(2, "composite: %s\n", l->name);
if (ed->composite)
img[id%2] = ed->composite(l, img[i]);
else
img[id%2] = ecomposite(l, img[i]);
freememimage(img[i]);
img[i] = nil;
}
void
outputcomposite(void)
{
Memimage *img[2]; /* swapchain */
int i;
img[0] = nil;
img[1] = nil;
i = foreachlayer(docomp, img);
if (img[i%2])
writememimage(1, img[i%2]);
else
writememimage(1, img[(i+1)%2]);
}
void
main(int argc, char **argv)
{
int outputonly = 0;
ARGBEGIN{
case 'c':
outputonly++;
break;
case 'd':
bliedebug++;
break;
}ARGEND;
root = "";
if (argc) {
root = argv[0];
}
rfork(RFNAMEG);
if (chdir(root))
sysfatal("cannot chdir: %r");
if (memimageinit())
sysfatal("memimageinit: %r");
loadeditors();
if (!loadfile())
sysfatal("cannot load data: %r");
if (outputonly) {
outputcomposite();
exits(nil);
}
fprint(2, "interactive mode is not implemented yet!\n");
exits(nil);
}