ivtv-player.c - vtv-tools - virtual terminal video tools Err bitreich.org 70 hgit clone git://bitreich.org/vtv-tools git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/vtv-tools URL:git://bitreich.org/vtv-tools git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/vtv-tools bitreich.org 70 1Log /scm/vtv-tools/log.gph bitreich.org 70 1Files /scm/vtv-tools/files.gph bitreich.org 70 1Refs /scm/vtv-tools/refs.gph bitreich.org 70 1Tags /scm/vtv-tools/tag bitreich.org 70 1README /scm/vtv-tools/file/README.md.gph bitreich.org 70 1LICENSE /scm/vtv-tools/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 ivtv-player.c (1882B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 // Copyright 2023 Troels Henriksen Err bitreich.org 70 i 2 // Err bitreich.org 70 i 3 // See LICENSE file for licensing information. Err bitreich.org 70 i 4 Err bitreich.org 70 i 5 #include Err bitreich.org 70 i 6 #include Err bitreich.org 70 i 7 #include Err bitreich.org 70 i 8 #include Err bitreich.org 70 i 9 #include Err bitreich.org 70 i 10 #include Err bitreich.org 70 i 11 Err bitreich.org 70 i 12 #include "vtv.h" Err bitreich.org 70 i 13 Err bitreich.org 70 i 14 void hide_cursor() { printf("\033[?25l"); } Err bitreich.org 70 i 15 void show_cursor() { printf("\033[?25h"); } Err bitreich.org 70 i 16 void move(int x, int y) { printf("\033[%d;%dH", y, x); } Err bitreich.org 70 i 17 void home() { printf("\033[;H"); } Err bitreich.org 70 i 18 void clear_screen() { printf("\033[2J"); } Err bitreich.org 70 i 19 void clear_line() { printf("\033[2K"); } Err bitreich.org 70 i 20 void def() { printf("\033[0m"); } Err bitreich.org 70 i 21 void reset() { printf("\033c"); } Err bitreich.org 70 i 22 Err bitreich.org 70 i 23 void sigint(int unused) { Err bitreich.org 70 i 24 (void)unused; Err bitreich.org 70 i 25 reset(); Err bitreich.org 70 i 26 exit(0); Err bitreich.org 70 i 27 } Err bitreich.org 70 i 28 Err bitreich.org 70 i 29 int main(int argc, char* argv[]) { Err bitreich.org 70 i 30 int fps = 20; Err bitreich.org 70 i 31 int frame_lines = 25; Err bitreich.org 70 i 32 int times = -1; Err bitreich.org 70 i 33 const char *vtv_file; Err bitreich.org 70 i 34 struct vtv* vtv; Err bitreich.org 70 i 35 Err bitreich.org 70 i 36 while (1) { Err bitreich.org 70 i 37 switch (getopt(argc, argv, "r:h:t:")) { Err bitreich.org 70 i 38 case 'r': Err bitreich.org 70 i 39 fps = atoi(optarg); Err bitreich.org 70 i 40 break; Err bitreich.org 70 i 41 case 'h': Err bitreich.org 70 i 42 frame_lines = atoi(optarg); Err bitreich.org 70 i 43 break; Err bitreich.org 70 i 44 case 't': Err bitreich.org 70 i 45 times = atoi(optarg); Err bitreich.org 70 i 46 break; Err bitreich.org 70 i 47 case -1: Err bitreich.org 70 i 48 if (optind == argc-1) { Err bitreich.org 70 i 49 vtv_file = argv[optind]; Err bitreich.org 70 i 50 goto done; Err bitreich.org 70 i 51 } Err bitreich.org 70 i 52 // fallthrough Err bitreich.org 70 i 53 default: Err bitreich.org 70 i 54 fprintf(stderr, "Usage: %s [-r fps] [-h frameheight] [-t times] FILE\n", argv[0]); Err bitreich.org 70 i 55 exit(1); Err bitreich.org 70 i 56 } Err bitreich.org 70 i 57 } Err bitreich.org 70 i 58 done: Err bitreich.org 70 i 59 vtv = vtv_read_from_file(vtv_file); Err bitreich.org 70 i 60 if (vtv == NULL) { Err bitreich.org 70 i 61 fprintf(stderr, "%s: cannot read %s: %s\n", Err bitreich.org 70 i 62 argv[0], vtv_file, strerror(errno)); Err bitreich.org 70 i 63 exit(1); Err bitreich.org 70 i 64 } Err bitreich.org 70 i 65 Err bitreich.org 70 i 66 int num_frames = (vtv->num_lines + frame_lines - 1) / frame_lines; Err bitreich.org 70 i 67 Err bitreich.org 70 i 68 hide_cursor(); Err bitreich.org 70 i 69 clear_screen(); Err bitreich.org 70 i 70 Err bitreich.org 70 i 71 int frame = 0; Err bitreich.org 70 i 72 signal(SIGINT, sigint); Err bitreich.org 70 i 73 Err bitreich.org 70 i 74 for (int i = times; i != 0; i--) { Err bitreich.org 70 i 75 useconds_t nap = 1000000.0 / fps; Err bitreich.org 70 i 76 frame = (frame+1) % num_frames; Err bitreich.org 70 i 77 home(); Err bitreich.org 70 i 78 vtv_show_frame(vtv, stdout, frame, frame_lines, Err bitreich.org 70 i 79 "\033[0m MISSING LINE"); Err bitreich.org 70 i 80 usleep(nap); Err bitreich.org 70 i 81 if (i < 0) Err bitreich.org 70 i 82 i = -1; Err bitreich.org 70 i 83 } Err bitreich.org 70 i 84 def(); Err bitreich.org 70 i 85 reset(); Err bitreich.org 70 i 86 } Err bitreich.org 70 i 87 Err bitreich.org 70 .