diff options
author | June McEnroe <programble@gmail.com> | 2018-02-09 15:14:33 -0500 |
---|---|---|
committer | June McEnroe <programble@gmail.com> | 2018-02-09 15:14:33 -0500 |
commit | 3d6cfca2326fe21c90668e02794a81d2ed7615de (patch) | |
tree | c1055d70ed6d310a46e945b8270cf909314d9ace /bin/gfb.c | |
parent | Add janky X11 graphics frontend (diff) | |
download | src-3d6cfca2326fe21c90668e02794a81d2ed7615de.tar.gz src-3d6cfca2326fe21c90668e02794a81d2ed7615de.zip |
Move gfx frontends around to simplify build
I forgot that you can expand variables inside variables names in make. Certainly makes some fun things possible.
Diffstat (limited to 'bin/gfb.c')
-rw-r--r-- | bin/gfb.c | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/bin/gfb.c b/bin/gfb.c deleted file mode 100644 index 503a8781..00000000 --- a/bin/gfb.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (c) 2018, Curtis McEnroe <programble@gmail.com> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <err.h> -#include <fcntl.h> -#include <linux/fb.h> -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/ioctl.h> -#include <sys/mman.h> -#include <sysexits.h> -#include <termios.h> -#include <unistd.h> - -extern int init(int argc, char *argv[]); -extern const char *status(void); -extern void draw(uint32_t *buf, size_t xres, size_t yres); -extern bool input(char in); - -static struct termios saveTerm; -static void restoreTerm(void) { - tcsetattr(STDERR_FILENO, TCSADRAIN, &saveTerm); -} - -int main(int argc, char *argv[]) { - int error; - - error = init(argc, argv); - if (error) return error; - - const char *path = getenv("FRAMEBUFFER"); - if (!path) path = "/dev/fb0"; - - int fb = open(path, O_RDWR); - if (fb < 0) err(EX_OSFILE, "%s", path); - - struct fb_var_screeninfo info; - error = ioctl(fb, FBIOGET_VSCREENINFO, &info); - if (error) err(EX_IOERR, "%s", path); - - size_t size = 4 * info.xres * info.yres; - uint32_t *buf = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0); - if (buf == MAP_FAILED) err(EX_IOERR, "%s", path); - - error = tcgetattr(STDERR_FILENO, &saveTerm); - if (error) err(EX_IOERR, "tcgetattr"); - atexit(restoreTerm); - - struct termios term = saveTerm; - term.c_lflag &= ~(ICANON | ECHO); - error = tcsetattr(STDERR_FILENO, TCSADRAIN, &term); - if (error) err(EX_IOERR, "tcsetattr"); - - uint32_t saveBg = buf[0]; - - uint32_t back[info.xres * info.yres]; - for (;;) { - draw(back, info.xres, info.yres); - memcpy(buf, back, size); - - char in; - ssize_t len = read(STDERR_FILENO, &in, 1); - if (len < 0) err(EX_IOERR, "read"); - if (!len) return EX_DATAERR; - - if (!input(in)) { - for (uint32_t i = 0; i < info.xres * info.yres; ++i) { - buf[i] = saveBg; - } - fprintf(stderr, "%s\n", status()); - return EX_OK; - } - } -} |