Initial import. - vtv-tools - virtual terminal video tools
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a4a3d674601be3dc0a84e2bf111999eefa4d57b0
 (HTM) Author: Troels Henriksen <athas@sigkill.dk>
       Date:   Sat, 12 Aug 2023 21:56:34 +0200
       
       Initial import.
       
       Diffstat:
         A Makefile                            |      11 +++++++++++
         A README.md                           |      17 +++++++++++++++++
         A bin/vtvplayer                       |      31 +++++++++++++++++++++++++++++++
       
       3 files changed, 59 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -0,0 +1,11 @@
       +# paths
       +PREFIX ?= /usr/local
       +
       +all:
       +
       +install: all
       +        @echo \# Installing executable files to ${PREFIX}/bin
       +        @mkdir -p ${PREFIX}/bin/
       +        install bin/* ${PREFIX}/bin/
       +
       +.PHONY: all install
 (DIR) diff --git a/README.md b/README.md
       @@ -0,0 +1,17 @@
       +# Virtual Terminal Video tools
       +
       +Tools for working with the VTV format.
       +
       +## Currently available
       +
       +* [`vtvplayer`](vtvplayer)
       +
       +## Format specification
       +
       +A frame consists of 25 lines, each terminated by a newline character.
       +A file consists of frames in sequence.  This means the number of lines
       +in a file must be divisible by 25.  A line can contain arbitrary
       +terminal control codes (or just plain text).  Playing a .vtv file
       +consists of copying the frames to the screen, one after another.  The
       +delay between each frame (i.e. the frame rate) is not part of the file
       +contents, but must be somehow known from elsewhere.
 (DIR) diff --git a/bin/vtvplayer b/bin/vtvplayer
       @@ -0,0 +1,31 @@
       +#!/bin/sh
       +#
       +# Play a single vtv file in an infinite loop.
       +
       +trap 'clear; tput cvvis; exit 0' SIGINT
       +
       +
       +if [ $# -lt 1 ];
       +then
       +    echo "Usage: $0 ADDIR" >&2
       +    exit 1
       +    year="$(date +%Y)"
       +fi
       +
       +adfile="$1"
       +frametime=0.05
       +framelines=25
       +
       +tput civis
       +clear
       +i=0
       +nframes=$(echo "$(wc -l < "${adfile}")" / "$framelines" | bc)
       +while true; do
       +    tput cup 0 0
       +    tail -n +$(echo "(1+${i} % ${nframes} * ${framelines})" | bc) "$adfile" | head -n $framelines
       +    i=$(($i + 1))
       +
       +    userinput=""
       +    sleep $frametime
       +done
       +