commit 94fa04f4132f7db25a681f1d52f294351b58c7ca
parent e56e6e57aa64f7695dca271de1755794489b2dc6
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sat, 10 Aug 2024 10:27:59 +0200
Add slide effects.
Diffstat:
4 files changed, 141 insertions(+), 0 deletions(-)
diff --git a/README.md b/README.md
@@ -26,6 +26,10 @@ To view the examples:
 
 	% dir2point .
 
+Slide effects:
+
+	% catpoint-wrap slide-effects/fade.sh *.txt
+
 
 There are not many formatting options for now, but it’s enough for daily
 usage. If you need any graph or formatting, use  troff(1)  and  all  the
diff --git a/slide-effects/fade.sh b/slide-effects/fade.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+set -e
+
+clear
+
+fg_rgb() {
+    printf "\033[38;2;%d;%d;%dm" $1 $2 $3
+}
+
+def() {
+    printf "\033[0m"
+}
+
+from=$1
+to=$2
+
+home() {
+    printf "\033[;H"
+}
+
+i=255
+while [ $i -gt 0 ]; do
+    fg_rgb $i $i $i
+    home
+    cat "$from"
+    i=$((i-1))
+done
+
+clear
+
+while [ $i -lt 255 ]; do
+    fg_rgb $i $i $i
+    home
+    cat "$to"
+    i=$((i+1))
+done
diff --git a/slide-effects/interpolate.c b/slide-effects/interpolate.c
@@ -0,0 +1,86 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#define STEPS 32
+
+/* SLEEPTIME in microseconds */
+#define SLEEPTIME 100
+
+int
+main(int argc, char *argv[])
+{
+	FILE *from, *to;
+	int i, j, k;
+	int width, height;
+	int fromn, ton;
+	size_t linesize;
+	ssize_t r;
+	char **fromlines, **tolines, *line;
+	char fromc, toc;
+
+	if (argc < 3)
+		return 1;
+
+	if (!(from = fopen(argv[1], "r")))
+		return 1;
+
+	if (!(to = fopen(argv[2], "r")))
+		return 1;
+
+	line = NULL;
+	linesize = 0;
+	width = 0;
+
+	fromn = 0;
+	fromlines = NULL;
+	while ((r = getline(&line, &linesize, from)) != -1) {
+		if (line[r-1] == '\n')
+			line[--r] = '\0';
+		fromn++;
+		fromlines = realloc(fromlines, fromn * sizeof(*fromlines));
+		fromlines[fromn-1] = strdup(line);
+		if (r > width)
+			width = r;
+	}
+	fclose(from);
+
+	ton = 0;
+	tolines = NULL;
+	while ((r = getline(&line, &linesize, to)) != -1) {
+		if (line[r-1] == '\n')
+			line[--r] = '\0';
+		ton++;
+		tolines = realloc(tolines, ton * sizeof(*tolines));
+		tolines[ton-1] = strdup(line);
+		if (r > width)
+			width = r;
+	}
+	fclose(to);
+
+	height = ton > fromn ? ton : fromn;
+
+	printf("\033[2J");
+	for (k = 0; k <= STEPS; k++) {
+		printf("\033[;H");
+		for (i = 0; i < height; i++) {
+			for (j = 0; j < width; j++) {
+				fromc = ' ';
+				toc = ' ';
+				if (i < fromn && j < strlen(fromlines[i]))
+					fromc = fromlines[i][j];
+				if (i < ton && j < strlen(tolines[i]))
+					toc = tolines[i][j];
+				if (toc & 128)
+					putchar(toc);
+				else
+					putchar(fromc + (toc - fromc) * k / STEPS);
+			}
+			putchar('\n');
+		}
+		usleep(SLEEPTIME);
+	}
+
+	return 0;
+}
diff --git a/slide-effects/random-animation.sh b/slide-effects/random-animation.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+randomanimation() {
+	printf '%s\n' beams binarypath blackhole bouncyballs bubbles burn \
+		colorshift crumble decrypt errorcorrect expand fireworks \
+		middleout orbittingvolley overflow pour print rain \
+		randomsequence rings scattered slice slide spotlights spray \
+		swarm synthgrid unstable vhstape waves wipe \
+	| sort -R | head -n 1
+}
+
+# From: https://github.com/ChrisBuilds/terminaltexteffects
+exec tte --frame-rate 400 --input-file "$1" "$(randomanimation)"
+