/* TV typewriter using admu (adĪ¼?). Echoes keystrokes back to the * screen. */ #include #include #include #include "admu.h" #include "xshmu.h" int main(int argc, char **argv) { enum { rows = 24, cols = 80, height = rows*admu_font_h, width = cols*admu_font_w }; xshmu w = xshmu_open("admu 3a", width, height, ""); admu t; unsigned char buf[cols*rows]; admu_init(&t, cols, rows, buf); for (;;) { xshmu_pic fb = xshmu_framebuffer(w); admu_generate_chars(&t, fb.p, fb.w, fb.stride, fb.h); xshmu_flush(w); xshmu_wait(w); for (xshmu_event *ev; (ev = xshmu_get_event(w));) { if (xshmu_as_die_event(ev)) return 0; xshmu_key_event *kev = xshmu_as_key_event(ev); if (kev && kev->down) { for (int i = 0; i < kev->len; i++) { admu_handle_char(&t, kev->s[i]); if (kev->s[i] == '\r') admu_handle_char(&t, '\n'); } if (!kev->len) { switch(kev->keysym) { case xks_left: admu_handle_char(&t, '\010'); break; /* ^H */ case xks_down: admu_handle_char(&t, '\012'); break; /* ^J */ case xks_up: admu_handle_char(&t, '\013'); break; /* ^K */ case xks_right: admu_handle_char(&t, '\014'); break; /* ^L */ } } } } } }