From 3e0f9309581a7a21bda5a44c00dae827a66a192e Mon Sep 17 00:00:00 2001 From: Quinn Date: Fri, 9 Jan 2026 17:57:55 +0100 Subject: [PATCH] Rework ovo,owo,uwu scripts, to now compile the source code on launch. --- .local/.gitignore | 1 + .local/bin/dvd | 15 ++++++ .local/bin/ovo | Bin 15560 -> 3 bytes .local/bin/owo | Bin 15560 -> 3 bytes .local/bin/uwu | Bin 15560 -> 3 bytes .local/share/dvd.c | 121 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 137 insertions(+) create mode 100755 .local/bin/dvd mode change 100755 => 120000 .local/bin/ovo mode change 100755 => 120000 .local/bin/owo mode change 100755 => 120000 .local/bin/uwu create mode 100644 .local/share/dvd.c diff --git a/.local/.gitignore b/.local/.gitignore index c13c180..857c1a9 100644 --- a/.local/.gitignore +++ b/.local/.gitignore @@ -1,2 +1,3 @@ /share/* !/share/cpusetcores +!/share/dvd.c diff --git a/.local/bin/dvd b/.local/bin/dvd new file mode 100755 index 0000000..3defea1 --- /dev/null +++ b/.local/bin/dvd @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# Get the executable location, following xdg-state spec. +exe=$XDG_STATE_HOME +[ -z "$exe" ] && exe=$HOME/.local/state +exe+=/dvd + +# Compile the executable +[ -x "$exe" ] || { + src="$(dirname "$0")/../share/dvd.c" + cc -s -std=gnu99 -Os -o "$exe" "$src" +} + +# Continue executing the executable +exec -a "$(basename "$0")" "$exe" "$@" diff --git a/.local/bin/ovo b/.local/bin/ovo deleted file mode 100755 index 13b69e03d5eb5e399f410739afcf582a190568d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15560 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 diff --git a/.local/bin/owo b/.local/bin/owo new file mode 120000 index 0000000..006fd2d --- /dev/null +++ b/.local/bin/owo @@ -0,0 +1 @@ +dvd \ No newline at end of file diff --git a/.local/bin/uwu b/.local/bin/uwu deleted file mode 100755 index 9d78232961a946aa8b2105704dc014eba3b1e0df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15560 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 s{($;TFt diff --git a/.local/bin/uwu b/.local/bin/uwu new file mode 120000 index 0000000..006fd2d --- /dev/null +++ b/.local/bin/uwu @@ -0,0 +1 @@ +dvd \ No newline at end of file diff --git a/.local/share/dvd.c b/.local/share/dvd.c new file mode 100644 index 0000000..56043ed --- /dev/null +++ b/.local/share/dvd.c @@ -0,0 +1,121 @@ +#include +#include +#include +#include +#include + +/* Fixed integer size type definitions. */ +typedef __INT8_TYPE__ i8; +typedef __INT16_TYPE__ i16; +typedef __INT32_TYPE__ i32; +typedef __INT64_TYPE__ i64; +typedef __UINT8_TYPE__ u8; +typedef __UINT16_TYPE__ u16; +typedef __UINT32_TYPE__ u32; +typedef __UINT64_TYPE__ u64; + +/* Variable integer sizes. */ +typedef signed long long llong; +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long ulong; +typedef unsigned long long ullong; + +static const char *formats[3] = { + "\033[1K" // Erase from start of the line to the cursor + "\033[%d;%dH" // Set cursor to row and column (origin 1,1) + "\033[9%dm%s", // Set colour and print text. + + "\033[%d;%dH" // Set cursor to row and column (origin 1,1) + "\033[9%dm%s", // Set colour and print text. + + "\033[%d;%dH" // Set cursor to row and column (origin 1,1) + "\033[1K" // Erase from start of the line to the cursor + "\033[9%dm%s", // Set colour and print text. +}; + +static const char *owo = "owo\0"; +static const char *uwu = "uwu\0"; +static const char *ovo = "ovo\0"; + +static void cursor_pos(int *row, int *col) +{ + /* Disable echo and canonical mode, + * So LF isn't needed to continue execution, and so the value isn't printed. */ + tcflag_t flag; + struct termios term; + tcgetattr(STDIN_FILENO, &term); + flag = term.c_lflag; + term.c_lflag &= ~(ICANON | ECHO); // Disable echo and canonical mode + tcsetattr(STDIN_FILENO, TCSANOW, &term); + + /* Acquire the cursor position(s). */ + fprintf(stderr, "\033[6n"); + getchar(); // ESC + getchar(); // [ + char c; + *row = 0; + *col = 0; + while ((c = getchar()) != ';') + *row = (*row * 10) + (c - '0'); + while ((c = getchar()) != 'R') + *col = (*col * 10) + (c - '0'); + + /* Restore the previous flags. */ + term.c_lflag = flag; + tcsetattr(STDIN_FILENO, TCSANOW, &term); +} + +/* + * INFO: Beware the fmt parameter, since it may break. */ +static void dvd(const char *fmt, const char *txt) +{ + u8 colour = 0; + int x, dx = -1; + int y, dy = 1; + _Bool tmpx, tmpy; + cursor_pos(&y, &x); + fprintf(stderr, "\033[?25l"); // Hide cursor + + ushort w, h; + { + struct winsize ws; + ioctl(STDERR_FILENO, TIOCGWINSZ, &ws); + w = ws.ws_col - 2; + h = ws.ws_row; + } + + while (1) { + /* test for collisions. */ + tmpx = (1 < x) & (x < w); + tmpy = (1 < y) & (y < h); + + /* flip direction if that axis has collided. */ + dx = tmpx ? dx : -dx; + dy = tmpy ? dy : -dy; + colour = (colour + !(tmpx & tmpy)) & 7; // increment colour on collisions + + /* Write the message */ + fprintf(stderr, + fmt, + y, x, + colour, txt); + + /* Increment the co-ordinate, and ensure it remains within bounds. */ + x += dx; + y += dy; + + usleep(50 * 1000); + } +} + +int main(int argc, char **argv) +{ + /* Perform slightly different actions, depending on arg0. */ + if (!argc) return 1; + if (!strncmp(*argv, owo, 4)) dvd(formats[0], owo); + if (!strncmp(*argv, uwu, 4)) dvd(formats[1], uwu); + if (!strncmp(*argv, ovo, 4)) dvd(formats[2], ovo); + return 1; +}