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); }