Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcbfd4c98b | ||
|
|
7519b719ba | ||
|
|
bfb4b6513f | ||
|
|
effca97ac0 |
No files matched your search
@@ -0,0 +1,21 @@
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: ./configure && make
|
||||
- run: ./mikusays -V && ./mikusays "hi"
|
||||
|
||||
windows-cross:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: sudo apt-get update && sudo apt-get install -y gcc-mingw-w64-x86-64
|
||||
- run: ./configure --host=x86_64-w64-mingw32 && make
|
||||
@@ -0,0 +1,90 @@
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ["v*"]
|
||||
|
||||
jobs:
|
||||
dist:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: install autotools
|
||||
run: sudo apt-get update && sudo apt-get install -y autoconf automake
|
||||
- run: autoreconf -fi
|
||||
- run: touch configure configure.ac aclocal.m4 Makefile.in
|
||||
- name: tag must match version in configure.ac
|
||||
run: |
|
||||
ver=$(./configure --version | head -1 | awk '{print $NF}')
|
||||
test "v$ver" = "$GITHUB_REF_NAME"
|
||||
- run: ./configure && make distcheck
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: dist
|
||||
path: mikusays-*.tar.gz
|
||||
|
||||
# linux binary, built from the tarball (so it tests what packagers get)
|
||||
build:
|
||||
needs: dist
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: install compiler
|
||||
run: sudo apt-get update && sudo apt-get install -y build-essential
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: dist
|
||||
- name: build and package
|
||||
run: |
|
||||
VERSION=${GITHUB_REF_NAME#v}
|
||||
tar xf mikusays-$VERSION.tar.gz
|
||||
cd mikusays-$VERSION
|
||||
./configure LDFLAGS="-static"
|
||||
make
|
||||
strip mikusays
|
||||
./mikusays -V
|
||||
./mikusays "hi" > /dev/null
|
||||
mv mikusays ../mikusays-$VERSION-linux-x86_64
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: bin-linux-x86_64
|
||||
path: mikusays-*-linux-x86_64
|
||||
|
||||
build-windows:
|
||||
needs: dist
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: install compiler
|
||||
run: sudo apt-get update && sudo apt-get install -y build-essential gcc-mingw-w64-x86-64
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: dist
|
||||
- name: build and package
|
||||
run: |
|
||||
VERSION=${GITHUB_REF_NAME#v}
|
||||
tar xf mikusays-$VERSION.tar.gz
|
||||
cd mikusays-$VERSION
|
||||
./configure --host=x86_64-w64-mingw32 LDFLAGS="-static"
|
||||
make
|
||||
x86_64-w64-mingw32-strip mikusays.exe
|
||||
mv mikusays.exe ../mikusays-$VERSION-windows-x86_64.exe
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: bin-windows-x86_64
|
||||
path: mikusays-*-windows-x86_64.exe
|
||||
|
||||
release:
|
||||
needs: [dist, build, build-windows]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: artifacts
|
||||
- name: checksums
|
||||
run: |
|
||||
cd artifacts
|
||||
find . -mindepth 2 -type f -exec mv {} . \;
|
||||
find . -type d -empty -delete
|
||||
sha256sum * > SHA256SUMS
|
||||
- uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
files: artifacts/*
|
||||
@@ -1,49 +0,0 @@
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
unix:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-24.04, ubuntu-24.04-arm, macos-15, macos-15-intel]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- run: ./configure && make
|
||||
- run: ./mikusays -V && ./mikusays "hi"
|
||||
|
||||
windows:
|
||||
runs-on: windows-2025
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: UCRT64
|
||||
install: mingw-w64-ucrt-x86_64-gcc make
|
||||
- run: ./configure && make
|
||||
- run: ./mikusays.exe -V && ./mikusays.exe "hi"
|
||||
|
||||
# runs in a real FreeBSD VM with its stock cc + BSD make
|
||||
freebsd:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: vmactions/freebsd-vm@v1
|
||||
with:
|
||||
usesh: true
|
||||
run: |
|
||||
./configure
|
||||
make
|
||||
./mikusays -V
|
||||
./mikusays "hi"
|
||||
@@ -1,116 +0,0 @@
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ["v*"]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
# builds the source tarball (configure included) and checks tag == configure.ac version
|
||||
dist:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: install autotools
|
||||
run: sudo apt-get update && sudo apt-get install -y autoconf automake
|
||||
- run: autoreconf -fi
|
||||
- run: touch configure configure.ac aclocal.m4 Makefile.in
|
||||
- name: tag must match version in configure.ac
|
||||
run: |
|
||||
ver=$(./configure --version | head -1 | awk '{print $NF}')
|
||||
test "v$ver" = "$GITHUB_REF_NAME"
|
||||
- run: ./configure && make distcheck
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: dist
|
||||
path: mikusays-*.tar.gz
|
||||
|
||||
# linux + macos binaries, built from the tarball (so it tests what packagers get)
|
||||
build:
|
||||
needs: dist
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { name: linux-x86_64, os: ubuntu-24.04, ldflags: "-static" }
|
||||
- { name: linux-aarch64, os: ubuntu-24.04-arm, ldflags: "-static" }
|
||||
- { name: macos-arm64, os: macos-15, ldflags: "" }
|
||||
- { name: macos-x86_64, os: macos-15-intel, ldflags: "" }
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||
steps:
|
||||
- uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: dist
|
||||
- name: build and package
|
||||
run: |
|
||||
VERSION=${GITHUB_REF_NAME#v}
|
||||
tar xf mikusays-$VERSION.tar.gz
|
||||
cd mikusays-$VERSION
|
||||
./configure LDFLAGS="${{ matrix.ldflags }}"
|
||||
make
|
||||
strip mikusays
|
||||
./mikusays -V
|
||||
./mikusays "hi" > /dev/null
|
||||
out=mikusays-$VERSION-${{ matrix.name }}
|
||||
mkdir "$out"
|
||||
cp mikusays LICENSE README.md "$out"/
|
||||
tar czf ../"$out".tar.gz "$out"
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bin-${{ matrix.name }}
|
||||
path: mikusays-*-${{ matrix.name }}.tar.gz
|
||||
|
||||
# windows exe via MSYS2/MinGW (configure needs a posix shell)
|
||||
windows:
|
||||
needs: dist
|
||||
runs-on: windows-2025
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
steps:
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: UCRT64
|
||||
install: mingw-w64-ucrt-x86_64-gcc make zip
|
||||
- uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: dist
|
||||
- name: build and package
|
||||
run: |
|
||||
VERSION=${GITHUB_REF_NAME#v}
|
||||
tar xf mikusays-$VERSION.tar.gz
|
||||
cd mikusays-$VERSION
|
||||
./configure LDFLAGS="-static"
|
||||
make
|
||||
strip mikusays.exe
|
||||
./mikusays.exe -V
|
||||
./mikusays.exe "hi" > /dev/null
|
||||
out=mikusays-$VERSION-windows-x86_64
|
||||
mkdir "$out"
|
||||
cp mikusays.exe LICENSE README.md "$out"/
|
||||
zip -r ../"$out".zip "$out"
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bin-windows-x86_64
|
||||
path: mikusays-*-windows-x86_64.zip
|
||||
|
||||
release:
|
||||
needs: [dist, build, windows]
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/download-artifact@v8
|
||||
with:
|
||||
path: artifacts
|
||||
merge-multiple: true
|
||||
- name: checksums
|
||||
run: cd artifacts && sha256sum * > SHA256SUMS
|
||||
- uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: artifacts/*
|
||||
generate_release_notes: true
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.73 for mikusays 1.0.0.
|
||||
# Generated by GNU Autoconf 2.73 for mikusays 1.1.0.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2026 Free Software Foundation,
|
||||
@@ -584,8 +584,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='mikusays'
|
||||
PACKAGE_TARNAME='mikusays'
|
||||
PACKAGE_VERSION='1.0.0'
|
||||
PACKAGE_STRING='mikusays 1.0.0'
|
||||
PACKAGE_VERSION='1.1.0'
|
||||
PACKAGE_STRING='mikusays 1.1.0'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL='https://git.squeakyrat.moe/mikusays-c'
|
||||
|
||||
@@ -1281,7 +1281,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
'configure' configures mikusays 1.0.0 to adapt to many kinds of systems.
|
||||
'configure' configures mikusays 1.1.0 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1348,7 +1348,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of mikusays 1.0.0:";;
|
||||
short | recursive ) echo "Configuration of mikusays 1.1.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1443,7 +1443,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
mikusays configure 1.0.0
|
||||
mikusays configure 1.1.0
|
||||
generated by GNU Autoconf 2.73
|
||||
|
||||
Copyright (C) 2026 Free Software Foundation, Inc.
|
||||
@@ -1555,7 +1555,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by mikusays $as_me 1.0.0, which was
|
||||
It was created by mikusays $as_me 1.1.0, which was
|
||||
generated by GNU Autoconf 2.73. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
@@ -3171,7 +3171,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='mikusays'
|
||||
VERSION='1.0.0'
|
||||
VERSION='1.1.0'
|
||||
|
||||
|
||||
printf '%s\n' "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||
@@ -5437,7 +5437,7 @@ cat >>"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by mikusays $as_me 1.0.0, which was
|
||||
This file was extended by mikusays $as_me 1.1.0, which was
|
||||
generated by GNU Autoconf 2.73. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -5497,7 +5497,7 @@ ac_cs_config_escaped=`printf '%s\n' "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
||||
cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
mikusays config.status 1.0.0
|
||||
mikusays config.status 1.1.0
|
||||
configured by $0, generated by GNU Autoconf 2.73,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ([2.69])
|
||||
AC_INIT([mikusays], [1.0.0], [], [mikusays], [https://git.squeakyrat.moe/mikusays-c])
|
||||
AC_INIT([mikusays], [1.1.0], [], [mikusays], [https://git.squeakyrat.moe/mikusays-c])
|
||||
AC_CONFIG_SRCDIR([src/main.c])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AM_INIT_AUTOMAKE([foreign subdir-objects -Wall])
|
||||
|
||||
+185
@@ -733,5 +733,190 @@ static char **mikuart[] = {
|
||||
|
||||
#define migucount (sizeof(mikuart)/sizeof(mikuart[0]))
|
||||
|
||||
static char *tetoart_0[] = {
|
||||
"",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⢚⡫⠽⢗⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣞⠞⠁⠀⠀⠀⠈⠙⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠴⠚⠋⠉⠉⠉⢻⡟⠉⠉⠉⠛⠲⢤⡀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠁⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠉⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠘⣦⣀⠀⠉⠒⢦⡀⠀⠘⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⣀⢤⣤⣤⣒⣒⣒⣶⣖⣠⣴⣳⡠⠃⣠⠖⠁⠀⠀⠀⢠⠃⠀⠀⢸⡌⠳⣄⠀⠀⠙⣄⠀⠘⣇⢀⣀⣀⣀⣀⣀⣀⣀⠀⠀⠀",
|
||||
"⢸⠺⣏⠉⠁⠀⠀⠉⠉⠉⣹⠇⡰⣡⠞⠁⡀⠀⠀⠀⣠⡎⠀⠀⠀⢨⡇⠀⠈⠢⡀⠀⠘⣆⠀⠸⡟⠛⠋⠉⠛⠛⠻⠿⠿⢯⣶",
|
||||
"⠈⡦⢄⣉⠒⠒⠀⠒⢒⣩⣿⣼⡿⡁⠤⡼⢂⣀⢀⡴⢻⠁⠀⠀⠀⢸⠱⡀⠀⠀⠀⠀⠀⠈⢆⢣⣗⣦⠤⣀⣀⣀⣀⠤⠖⠫⡾",
|
||||
"⠀⢯⠒⠦⠬⠍⠙⢧⣤⡤⠟⠋⣁⣠⠟⠀⣠⠴⠋⠀⢸⠀⠀⠀⢠⠟⠒⠳⣄⠀⠀⢰⡀⠀⠈⠣⡧⣉⣓⠒⠠⠤⠄⠒⠂⣩⡇",
|
||||
"⠀⠸⣯⣓⣒⣒⣒⣒⣲⠯⣿⢉⡵⠋⣠⢞⣿⣿⣦⠢⢸⢠⠇⣠⢋⡀⢀⣀⣈⠢⣀⠀⠻⡦⣤⣀⣬⡿⠯⣍⣉⣀⣀⣤⠬⢴⠁",
|
||||
"⠀⠀⢇⠉⠉⠉⠉⢁⣒⣭⢿⣫⢴⣻⡇⢸⣈⢿⡤⡇⢰⣞⡜⠁⢠⣾⣿⡿⢿⠻⡏⠓⠦⣝⣦⣟⡷⣉⠙⠓⠒⠶⠶⠶⠟⡇⠀",
|
||||
"⠀⠀⣯⣉⠉⠉⣉⣙⡿⢿⣿⢇⡎⢸⡃⠈⠣⠤⠝⢀⠞⠋⠀⠀⠀⣧⠜⠣⡺⢠⡃⠀⠀⡎⢻⠋⢿⣫⢝⡒⠲⠤⠤⠤⢖⡇⠀",
|
||||
"⠀⠀⢻⢛⡻⠯⠥⠤⠖⠋⣾⢸⣼⠸⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⠚⢁⡼⡇⠀⣾⢠⡏⠀⢸⣝⠯⣙⣒⣲⣶⣲⢖⡇⠀",
|
||||
"⠀⠀⠘⠦⠴⠿⠛⣲⣺⣿⠁⠀⠱⣦⡗⣿⣗⡤⣄⣀⠐⠤⠤⠀⠀⠀⠀⢀⣨⢴⣁⡾⠷⠏⠀⠀⠘⢢⡥⣤⣀⣀⣀⣒⣹⠀⠀",
|
||||
"⠀⠀⠀⠀⠸⣉⣉⣹⠾⠋⠀⠀⠀⠁⠙⠊⠛⠾⢇⡽⣿⣿⣗⣲⣶⠿⡍⠉⠰⠟⠁⠀⠀⠀⠀⠀⠀⠸⣍⠺⣦⡤⢤⠈⠁⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠳⢾⣄⡀⠀⠀⠀⠀⠀⠀⠀⣠⠿⣏⣈⢹⣏⣉⣧⡰⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢩⣳⡞⠋⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⢀⡴⠁⢀⡟⠜⣦⡟⠶⠛⢻⡓⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠒⠛⠁⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡴⣿⡿⢢⢫⠇⠀⡷⡇⠀⠀⠸⣷⠀⢈⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡛⣫⡴⢣⣾⡦⢤⣷⣇⣀⣠⠤⡷⣧⠿⠟⣳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⡰⣻⡹⠁⠀⡇⠀⡇⠀⢇⠘⣜⣦⣼⢚⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⢗⣒⣤⣇⣀⣥⣒⣚⢭⣽⠊⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡧⠤⠤⡏⡧⠹⠮⢿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⡇⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡇⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠀⠘⠛⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
NULL
|
||||
};
|
||||
|
||||
static char * tetoart_1[] = {
|
||||
"",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣬⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⢠⣶⠟⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⢠⣿⠏⣼⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⣾⣿⡆⣿⣿⡃⣿⣧⣝⢿⡻⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⢸⣿⣿⣿⢸⣿⣴⣾⣿⣿⣯⣳⣜⢿⣿⣿⣿⣿⡇⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⡌⣿⣿⣿⡈⣿⢀⣤⣤⣭⡉⠙⢿⡏⣿⣿⣿⣿⡇⠀⠀⠀",
|
||||
"⠀⠀⠀⢀⢸⡟⣿⣿⢷⡌⢸⣿⣿⣿⣿⣷⡜⢷⣿⣿⣿⣿⡇⠀⠀⠀",
|
||||
"⠀⠀⠀⠸⢘⡀⢻⣿⣦⡀⣙⡛⠛⠛⠿⠿⠿⢸⣿⣿⣿⣿⠃⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⢰⠀⢠⣍⠙⠻⣿⣿⣿⣷⣶⣦⠀⣾⣿⣿⣿⠃⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠈⢦⣾⢹⣿⣦⢘⣋⡁⠀⠀⢙⠃⣿⣿⠟⠁⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠈⢻⣾⣿⡏⠸⣿⡿⠿⠿⠟⢀⣡⣄⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠈⣾⠟⠀⠀⠠⢤⣼⣿⣆⢻⣿⣿⣷⡀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠘⠁⣊⣐⡀⣴⣶⡼⠟⣡⣾⣿⣿⣿⣷⡀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⡀⠀⢀⣴⣿⣿⣿⠿⠋⠀⠘⣻⣿⡿⢻⣿⣿⣿⢆⠀⠀⠀",
|
||||
"⠀⠀⠀⣠⡅⠐⢿⣙⠾⠿⠁⣰⣶⡾⢘⣋⣩⣾⡆⣿⣿⣿⣿⡆⠀⠀",
|
||||
"⠀⠀⠀⣿⡇⠀⠀⠙⠷⢷⣶⣭⣍⡁⣾⣿⣿⣿⡗⣿⣿⣿⣿⠇⠀⠀",
|
||||
"⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⣿⣶⣶⡄⢿⡛⠛⠛⠛⣸⠿⢏⠉⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠙⠛⠛⠁⠀⠈⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀",
|
||||
NULL
|
||||
};
|
||||
|
||||
static char *tetoart_2[] = {
|
||||
"",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠴⠶⠖⠒⠒⠲⠶⠦⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣟⣆⣧⣤⣶⣶⣶⣦⣤⣤⣤⣄⣀⡇⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⡀⠀⠀⣸⡿⠟⠛⠛⠛⠛⠛⠛⠛⠛⠋⠉⠙⠓⢦⣀⣠⠴⠶⠚⠉⠉⠀⠘⡇",
|
||||
"⠀⠀⠀⠀⠀⠀⣼⠁⠀⠀⠉⠉⣹⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⣦⢸⡋⠁⠀⠀⠀⠀⠀⠀⠀⠀⢹",
|
||||
"⠀⠀⠀⠀⠀⠀⡿⠀⠀⠀⠀⢠⡟⠁⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘",
|
||||
"⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⡿⠀⠀⠀⢸⠇⠀⠀⠀⠀⠀⣷⠀⠀⠀⠀⠀⠈⢿⣆⠀⠀⠀⠀⢀⣤⣤⣴⣾",
|
||||
"⠀⠀⠀⠀⠀⠈⣳⣶⣤⣤⢸⠇⠀⠀⠀⢸⡀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠈⣿⡀⠀⠀⠀⠀⠀⠀⠀⠘",
|
||||
"⠀⠀⠀⠀⠀⠀⡿⠀⠀⠀⢸⠀⠀⠀⢀⣸⡇⠀⠀⠀⠀⠀⢸⣧⡴⠆⠀⠀⠀⠀⠸⣟⣶⡶⠖⠀⠀⠀⠀⣀",
|
||||
"⠀⠀⠀⠀⠀⠀⣇⡀⠀⠀⣿⠀⠀⠀⢨⡟⢳⡒⠀⠀⠀⠈⡟⠉⠻⣤⠀⠀⠀⠀⣀⢻⣿⡀⠀⠀⠠⠾⠟⢳",
|
||||
"⠀⠀⠀⠀⠀⠀⢠⠟⠛⠀⣿⣾⠀⢀⣾⠀⠈⢳⣼⣷⣄⢰⠇⠀⠀⠈⠓⢦⣄⣀⡙⢷⣿⣷⠀⠀⠀⠀⠀⢸",
|
||||
"⠀⠀⠀⣾⡳⣄⢸⡀⠀⠐⢿⢇⣠⡟⢻⡀⠀⣀⣽⡿⠈⠉⠀⣰⣶⣆⣠⣼⢧⡟⠹⣍⡟⠈⢻⠖⠀⠀⣴⠚",
|
||||
"⠀⠀⠀⢻⠀⢻⡀⠳⣤⡄⠘⠛⣯⢻⣹⣟⠛⢛⠋⠁⠀⠀⠀⠉⠉⠩⠍⢸⣼⠁⡼⠋⠀⠀⠘⠦⠤⣄⢈⡿",
|
||||
"⠀⠀⠀⣠⣇⠀⣧⢺⣍⢠⡴⠶⠋⠈⢻⣿⣆⠀⠀⠀⣴⠚⠙⢷⠀⢀⡴⠿⠷⠚⠁⠀⠀⠀⠀⠀⢠⠿⠋⠀",
|
||||
"⠀⡴⠺⡅⠘⣆⠘⣆⠉⠻⢧⠀⠀⠀⠀⠈⠈⠙⠢⢤⣘⣦⣤⡼⢶⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⢰⢷⡀⢻⡀⢿⠀⠙⠚⠛⠛⣦⠀⠀⠀⠀⢀⣀⣠⣤⢞⡟⠒⠒⠺⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠘⣦⡻⣤⠿⠚⠀⢀⡶⠋⠉⠉⠀⠀⢀⡴⡏⣽⣽⣳⣿⣇⠀⠀⣴⣿⣷⠶⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠈⡿⠗⠀⠒⠒⢻⡄⠀⠀⠀⠀⣠⢞⣽⢱⣿⡟⣿⣿⣿⣤⢾⢿⢇⣹⠀⣿⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠓⣶⠒⠒⠒⢿⠀⠀⢀⣄⡾⡿⢊⡏⡞⡼⣸⣿⣿⢹⠓⠚⠚⢼⡿⠀⣿⠀⡀⠀⠀⠀⠀⠀⠀⢀⠀⠀",
|
||||
"⠀⠀⠀⢻⠀⠀⠀⠘⡆⣴⢋⢜⠻⣴⣿⢹⢿⢷⣿⣿⣿⠈⣽⢿⠖⢿⠁⠀⡗⠀⡀⠀⠀⠀⠀⠀⠀⢸⠙⠆",
|
||||
"⠀⠀⠀⠈⡇⠀⠀⠀⢻⠡⡫⣋⢎⢝⣇⣏⡎⣾⣿⣿⡟⢸⣾⣼⢸⢸⡀⠀⡇⠀⡇⠀⠀⠀⠀⠀⢀⡜⠀⠰",
|
||||
NULL
|
||||
};
|
||||
|
||||
static char *tetoart_3[] = {
|
||||
"",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡴⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣈⡧⠖⠚⠉⠉⠀⠀⠀⠀⠀⠘⡆⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡞⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⢀⡜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠦⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣨⡆⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⢀⡎⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⢀⡨⠻⣗⢄⠀⠀⣀⣠⡤⣤⠔⠛⢩⠟⠀⠀",
|
||||
"⠀⢀⣀⡤⠤⠤⣾⠀⠀⠀⠀⠰⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣆⠀⠀⠀⢀⡀⢤⡒⠥⠒⠉⠘⢯⡽⢿⠉⢀⣴⣁⣤⠴⠧⡄⠀⠀",
|
||||
"⠁⠀⠀⠀⠀⠀⡇⠁⠒⠀⠀⠀⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣆⠀⢀⡴⠉⠳⣄⠀⠀⠀⠀⠀⠻⣼⣖⠋⠁⠀⠀⠀⠀⢹⡀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⡇⠐⠒⠂⠤⠤⠤⡿⣄⠤⠤⠀⠀⠀⠀⠀⠀⠀⣽⣾⣋⠀⠀⠀⠈⠃⠀⠀⠀⠀⠀⠀⠺⠿⣤⠀⠀⠀⣀⡤⡿⠀",
|
||||
"⡄⠀⠀⠀⠀⠀⣹⠀⠀⠀⠀⠀⢠⣇⠘⢦⠀⠀⠀⠀⠀⠀⠰⠏⣽⡟⠉⠉⠓⣶⣴⣤⡀⣽⠦⠤⠴⡶⠚⠉⠁⣀⣴⠞⠁⡼⠃⠀",
|
||||
"⠈⡆⢀⡴⠲⠯⣭⡆⠀⠀⠀⠀⢸⡱⠉⠩⠿⣖⠂⣄⠀⠀⠀⠀⢀⣧⣶⣶⣿⣿⣯⣿⣷⠺⡄⠀⠀⡿⠤⢞⣩⣾⣥⡤⠾⠓⠙⡇",
|
||||
"⠀⠙⠯⠤⠤⣤⡴⠻⡄⠀⠀⠀⡞⠁⠀⠀⢀⣈⣳⣼⠛⢦⣀⠀⢲⣿⣿⡿⣿⡇⢹⡟⠛⠀⡧⠀⢠⡇⠀⠘⡆⠀⠀⠀⠀⠀⢠⡇",
|
||||
"⠀⠀⠀⠸⣍⠁⠀⠀⡇⠀⠀⣸⡇⣶⠿⣿⣿⣿⣷⡮⠀⠀⠈⠉⠓⠋⠘⢷⡬⠔⠋⡇⠀⠀⢧⠀⡼⠀⠀⠀⠉⠒⢠⡤⠤⣶⠞⠁",
|
||||
"⠀⠀⠀⠀⠈⠳⣄⣤⣿⡄⣰⣽⢻⡹⣆⠘⣿⡛⢻⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⢸⠸⣅⠀⠀⠀⢰⠏⠙⢶⣋⣁⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⢸⣧⡿⢽⡏⢧⠀⠀⠈⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⡼⠒⠚⠳⠀⠀⠈⠓⠦⠤⠼⠛⠁⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠈⠋⢧⠘⡇⠘⣇⠀⠀⠀⠀⠀⠀⠀⣠⠴⣒⡦⢤⡀⠀⠀⢀⣿⠀⢠⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⠿⡄⢸⣦⣀⠀⠀⠀⠀⠀⡟⠉⠀⠀⠀⣳⢀⡴⠋⢸⣄⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣛⠋⣳⣰⡇⠈⠛⠲⠤⣄⣀⣙⠦⠤⢤⣲⠵⠋⣀⣤⣼⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠛⠀⠀⠀⠀⠀⠀⣠⣿⣿⣭⡉⣠⣴⠿⡛⢉⣻⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣠⣄⣀⣰⣿⢻⣷⣔⣿⣗⢀⣠⣶⣿⣿⣿⣿⢦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠁⠀⠑⡀⣿⣶⣴⣼⣿⣿⣿⢿⣿⣿⢿⣿⡿⠏⣡⠿⠉⠀⢨⣿⡟⡩⠏⠉⠉⠓⠶⡄⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⢸⢿⡿⠿⠿⢿⣆⠙⣿⣻⣿⣿⢉⣡⡾⠃⠀⠀⠀⠨⣿⡏⠀⠀⠀⠀⠀⠀⢹⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⡞⠀⠏⠂⠢⡀⢹⣿⣿⣽⣿⣿⠾⠯⠀⠄⠤⠀⠔⠚⢸⠃⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠈⠁⣿⡿⣿⠛⡟⣴⠈⠁⠀⠀⠀⠀⠀⢸⠁⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⢀⡾⠚⠛⠛⠐⠒⢶⣤⡇⡇⣿⢰⣿⢃⡤⠖⠚⠉⠙⠓⠲⡏⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠀⠀⠀⢠⣼⢷⣄⣿⡿⢀⣠⣾⣼⠁⠀⣿⣼⠃⣟⠀⠀⠰⣶⡆⣠⣴⣧⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⢀⢦⣿⡀⠈⣿⠏⠉⢱⡇⢿⣶⣿⣿⡏⠀⡽⠉⠛⠛⣿⠛⡉⣸⠈⢄⡀⠀⠀⠀⠀⢰⡇⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⣤⠾⠒⠒⢳⣾⠀⠉⠂⡏⠀⠀⣾⡇⢸⣿⠻⢿⠁⠀⡇⠀⠀⠀⣿⢠⡇⣿⠶⠒⠛⠉⠉⠉⠙⢚⡆⠀⠀⠀",
|
||||
NULL
|
||||
};
|
||||
|
||||
static char *tetoart_4[] = {
|
||||
"",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠞⠉⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣿⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣻⡟⢯⣛⢿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⢷⣫⢇⣟⣣⠟⣮⢞⣯⡝⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⢀⣶⣾⣿⣿⣿⣿⣿⣿⡿⢉⣾⢱⢏⣶⣿⢿⣸⣉⣷⢹⣆⣿⣷⣰⣶⣰⣶⣆⡀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠘⣾⣭⢩⣝⣿⣻⣿⣟⣵⡋⣤⣿⢿⠿⡟⢚⣵⣿⢿⣶⢿⡾⣿⣿⣿⢿⣿⣿⣿⣿⡆",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⢳⢾⡋⠼⣿⣯⣷⡿⢧⣿⡻⠟⠁⢀⣏⣟⡟⠁⠈⢻⣯⢿⣿⣿⣿⠲⠴⣾⡿⣿⠇",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣷⣿⣾⣿⣿⣫⣿⡾⣷⣮⠁⢰⡾⠋⣴⣤⣤⡀⣿⣯⢿⣟⣿⣓⡻⢳⣻⡟⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣶⠶⣯⣿⣿⣿⣧⠃⠹⠋⠀⠀⠀⠀⠸⣻⠏⡿⣿⣿⣿⣿⣟⡛⣿⣿⡏⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣟⣹⣿⠟⣿⣿⡀⠀⠀⠀⠠⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣩⣽⣾⠿⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢯⣷⠀⠈⡟⡿⠢⢀⠁⠀⠈⠁⢀⡤⢺⠟⠛⠋⢹⣅⣫⢿⠟⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠋⠀⠀⠈⠋⢉⣀⢗⡠⠔⣞⡁⠀⠋⠀⠀⠀⠈⣿⠆⠁⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠀⣤⣴⣶⣿⡏⠀⠁⠃⠘⣿⣦⣴⣶⣤⢄⡐⠉⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠁⠀⠀⣿⣞⣿⣿⢧⡀⠀⣀⣾⣿⣿⣿⡿⠁⠀⠈⢂⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣆⡀⠀⠀⢰⢹⣭⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⡆⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣆⠀⣾⣿⣧⢿⣽⣿⢻⢿⣯⢿⣿⣿⣇⡄⠀⢠⣤⣶⡇⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⡿⢚⣿⢿⡻⢿⣿⢾⢫⢾⣽⣫⢿⣿⣿⣿⡄⠈⠉⠁⠠⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⠟⠁⠀⠸⣯⢷⣛⣯⣿⣿⠿⣿⣾⣯⢷⡞⣽⣿⣷⣀⡠⣴⣾⣄⠀⠀⠀⠀⠀",
|
||||
"⢠⣿⡻⣼⣹⣯⣿⣿⡟⠁⠀⠀⠀⠀⣿⢿⡻⣟⢷⡏⢾⣿⢺⡟⣿⢻⣿⣿⠃⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀",
|
||||
"⠸⣸⣿⢱⣇⢿⣸⢿⣇⠀⠀⠀⠀⠀⣿⣇⡿⣾⢹⣏⣹⣏⡷⢿⣸⢏⣿⣿⠀⢸⣿⣿⣿⡿⡆⠀⠀⠀⠀",
|
||||
"⠀⠘⠬⡑⠌⠛⠮⣏⣿⣵⣄⠀⠀⢸⣿⣜⣳⣭⣿⢽⣻⡿⣼⢻⡜⣯⣿⡇⠀⠈⣿⣿⢿⡿⣇⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠈⢳⣾⣔⣨⣗⢯⣿⣷⣄⡾⣿⣜⣳⢮⣿⣧⢻⡷⣭⡗⣯⣳⣿⣗⠀⠀⢻⡽⣾⣽⡿⡀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠙⢿⣿⣿⣯⣿⣿⣿⢀⣿⡾⣱⣯⣿⣽⣻⡽⣖⢯⣷⡿⣯⣏⠀⠀⠈⡷⣏⡿⣿⡗⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⣟⠯⣿⣳⣻⣿⣳⡽⣟⠻⣻⡿⣭⣿⢯⡽⣾⣿⡄⠀⠀⢿⣱⣏⣿⠳⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣻⡱⢎⣷⡯⣿⣿⣿⣷⣿⣿⣿⣛⡮⣗⣿⣿⣿⣿⡄⠀⢺⣷⢺⣿⣿⡀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⢠⡴⣿⣿⣷⣞⣿⡷⣿⢿⣿⣿⣟⢶⣯⢳⣿⣿⣿⣿⣿⣷⡀⢸⣷⣻⡿⢿⡅⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠃⠈⢹⢹⣿⡳⢯⣟⣿⡿⣿⣿⣿⣿⣿⣾⣿⢿⡿⣿⣿⣿⣿⣿⣽⢶⡛⣷⢦⡇⠀⠀",
|
||||
NULL
|
||||
};
|
||||
|
||||
static char *tetoart_5[] = {
|
||||
"",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⣠⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠻⡿⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠿⠥⠤⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⡠⡄⣤⠀⠀⠀⢀⠃⣷⡄⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠠⠀⠆⠀⠀⠐⠀⠈⠀⠨⠂⡄⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠚⠀⠠⠀⠀⠀⠀⢀⠀⠈⠐⣠⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠐⠀⠀⠀⠂⠀⠀⡀⠀⠀⠂⢁⢊⡅⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⢀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠂⡐⢼⡀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠂⠀⠀⠀⠂⠀⠀⣆⠀⠀⠀⠈⠄⠀⡔⣣⠀⠀⠀",
|
||||
"⠀⠀⠀⡡⠊⢆⠀⡀⠀⠀⡇⠈⠣⡀⠀⠀⠡⠀⠌⠐⣣⠀⠀",
|
||||
"⠀⡐⣬⢑⡅⢊⢎⣛⢬⡅⢧⠡⣂⣀⣄⠀⠈⠠⠈⠠⢘⢧⠀",
|
||||
"⢀⢱⡖⣍⣿⣧⠀⠣⣧⠓⠀⡜⣅⣿⣿⣧⢀⠐⠀⠂⢤⠭⡂",
|
||||
"⠠⠸⢇⠻⣿⡟⠂⠀⠘⢷⠀⠈⢿⣿⡿⡻⡉⠄⡁⠀⢀⠨⡆",
|
||||
"⠨⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠈⠀⠣⠀⠄⠐⠀⢁⡂",
|
||||
"⠈⡀⠀⠀⠀⠀⠀⢤⣀⣀⣠⠆⠀⠀⠀⠀⠁⠐⠌⠄⡠⢷⠃",
|
||||
"⠀⠐⡠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠁⠀⡃⠠⣂⢢⡜⠀",
|
||||
"⠀⠀⠈⢄⠁⢀⠀⡀⠀⠀⡀⠀⠠⠀⠀⠀⡠⠀⢁⢒⠈⠀⠀",
|
||||
"⠀⠀⠀⠀⠐⠠⡀⠂⠈⠄⠀⣀⠀⠈⢂⠈⠠⡰⠖⠁⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠉⠛⠷⣶⢾⣼⣧⡿⠷⠋⠁⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
static char **tetoart[] = {
|
||||
tetoart_0,
|
||||
tetoart_1,
|
||||
tetoart_2,
|
||||
tetoart_3,
|
||||
tetoart_4,
|
||||
tetoart_5,
|
||||
|
||||
};
|
||||
|
||||
#define tetocount (sizeof(tetoart)/sizeof(tetoart[0]))
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+63
-26
@@ -1,10 +1,15 @@
|
||||
#include "../defs/all.h"
|
||||
#include "../defs/mikuart.h"
|
||||
|
||||
char **getmikuart(int style){
|
||||
char **getmikuart(int style, int isteto){
|
||||
if(isteto == 0){
|
||||
if(style < 0)
|
||||
style = rand() % migucount;
|
||||
return mikuart[style];
|
||||
}
|
||||
if(style < 0)
|
||||
style = rand() % tetocount;
|
||||
return tetoart[style];
|
||||
}
|
||||
|
||||
struct win {
|
||||
@@ -232,7 +237,10 @@ static void print_help(void){
|
||||
" [TEXT] Text to display in the speech bubble\n\n"
|
||||
"Options:\n"
|
||||
" -s, --style <STYLE> Style of the Miku art. A random one is chosen if not specified\n"
|
||||
" -l, --list List all available art styles with their indices\n"
|
||||
" -l, --list List all available art (miku and teto) styles with their indices\n"
|
||||
" -lm, --listmiku List only the Miku art styles\n"
|
||||
" -lt, --listteto List only the Teto art styles\n"
|
||||
" -t, --teto Use Teto art instead of Miku\n"
|
||||
" --rainbow Apply a smooth rainbow gradient across the ASCII art\n"
|
||||
" --saturation <SATURATION> Saturation level for rainbow gradient (0-100) [default: 100]\n"
|
||||
" --brightness <BRIGHTNESS> Brightness level for rainbow gradient (0-100) [default: 50]\n"
|
||||
@@ -244,18 +252,33 @@ static void print_help(void){
|
||||
" -V, --version Print version\n");
|
||||
}
|
||||
|
||||
static void list_all_art_styles(void){
|
||||
printf("Available Miku art styles:\n");
|
||||
printf("==========================\n");
|
||||
printf("Total styles: %zu\n", migucount);
|
||||
#define LIST_NONE 0
|
||||
#define LIST_BOTH 1
|
||||
#define LIST_MIKU 2
|
||||
#define LIST_TETO 3
|
||||
|
||||
for(size_t i = 0; i < migucount; i++){
|
||||
printf("\n--- Style %zu ---\n", i);
|
||||
for(int j = 0; mikuart[i][j] != NULL; j++)
|
||||
printf("%s\n", mikuart[i][j]);
|
||||
static void list_art_group(const char *name, char ***art, size_t total){
|
||||
printf("%s styles (total: %zu)\n", name, total);
|
||||
printf("==========================\n");
|
||||
for(size_t style_index = 0; style_index < total; style_index++){
|
||||
printf("\n--- %s style %zu ---\n", name, style_index);
|
||||
for(int line_index = 0; art[style_index][line_index] != NULL; line_index++)
|
||||
printf("%s\n", art[style_index][line_index]);
|
||||
}
|
||||
}
|
||||
|
||||
static void list_all_art_styles(int list_mode){
|
||||
printf("Available art styles:\n\n");
|
||||
|
||||
if(list_mode == LIST_BOTH || list_mode == LIST_MIKU)
|
||||
list_art_group("Miku", mikuart, migucount);
|
||||
if(list_mode == LIST_BOTH)
|
||||
printf("\n");
|
||||
if(list_mode == LIST_BOTH || list_mode == LIST_TETO)
|
||||
list_art_group("Teto", tetoart, tetocount);
|
||||
|
||||
printf("\nUse --style <number> to select a specific style, or omit for random selection.\n");
|
||||
printf("Use --teto to pick from the Teto styles instead of the Miku ones.\n");
|
||||
|
||||
printf("\nColor Options:\n"
|
||||
" --rainbow Apply a smooth rainbow gradient\n"
|
||||
@@ -334,11 +357,11 @@ static void print_art_line(const char *line, size_t *index, size_t total){
|
||||
}
|
||||
|
||||
|
||||
void draw_miku_says(char *text, int style){
|
||||
void draw_miku_says(char *text, int style, int teto){
|
||||
char **speech_bubble_lines = getbubblelines(text);
|
||||
if(speech_bubble_lines == NULL)
|
||||
return;
|
||||
char **miku_art = getmikuart(style);
|
||||
char **miku_art = getmikuart(style, teto);
|
||||
|
||||
int available_width = TERMINALWIDTH;
|
||||
int available_height = TERMINALHEIGHT;
|
||||
@@ -457,8 +480,7 @@ static int usage_error(const char *format, ...){
|
||||
}
|
||||
|
||||
//returns 1 if argv[*index] is this option; *value stays NULL when the value is missing
|
||||
static int match_value_option(int argc, char **argv, int *index, const char *long_name,
|
||||
char short_name, const char **value){
|
||||
static int match_value_option(int argc, char **argv, int *index, const char *long_name, char short_name, const char **value){
|
||||
const char *argument = argv[*index];
|
||||
size_t long_length = strlen(long_name);
|
||||
|
||||
@@ -525,12 +547,16 @@ static int parse_gradient(const char *specification, rgbcolor *start, rgbcolor *
|
||||
|
||||
int main(int argc, char **argv){
|
||||
long style = -1; //-1 means random
|
||||
int index, result = 0, list_requested = 0, color_debug = 0, no_color = 0;
|
||||
int index, result = 0, list_requested = 0, color_debug = 0;
|
||||
#ifdef _WIN32
|
||||
int no_color = 0;
|
||||
#endif
|
||||
int has_text = 0, options_ended = 0, ansi_enabled = 0;
|
||||
const char *value, *color_text = NULL, *gradient_text = NULL;
|
||||
ColorParseError color_error;
|
||||
size_t length = 0;
|
||||
size_t length = 0, art_total;
|
||||
char *text;
|
||||
int areyouteto = 0;
|
||||
|
||||
srand(time(NULL));
|
||||
getterminalsize();
|
||||
@@ -558,15 +584,25 @@ int main(int argc, char **argv){
|
||||
printf("mikusays " VERSION "\n");
|
||||
goto out;
|
||||
} else if(strcmp(argument, "-l") == 0 || strcmp(argument, "--list") == 0){
|
||||
list_requested = 1;
|
||||
} else if(strcmp(argument, "--no-color") == 0){
|
||||
list_requested = LIST_BOTH;
|
||||
} else if(strcmp(argument, "-lm") == 0 || strcmp(argument, "--listmiku") == 0){
|
||||
list_requested = LIST_MIKU;
|
||||
} else if(strcmp(argument, "-lt") == 0 || strcmp(argument, "--listteto") == 0){
|
||||
list_requested = LIST_TETO;
|
||||
}
|
||||
#ifdef _WIN32
|
||||
else if(strcmp(argument, "--no-color") == 0){
|
||||
no_color = 1;
|
||||
colors.mode = MODE_NONE;
|
||||
}else if(strcmp(argument, "--rainbow") == 0){
|
||||
}
|
||||
#endif
|
||||
else if(strcmp(argument, "--rainbow") == 0){
|
||||
colors.rainbow_enabled = true;
|
||||
} else if(strcmp(argument, "--color-debug") == 0){
|
||||
color_debug = 1;
|
||||
} else if(match_value_option(argc, argv, &index, "--style", 's', &value)){
|
||||
} else if(strcmp(argument, "--teto") == 0 || strcmp(argument, "-t") == 0){
|
||||
areyouteto = 1;
|
||||
}else if(match_value_option(argc, argv, &index, "--style", 's', &value)){
|
||||
char *end;
|
||||
long parsed;
|
||||
if(value == NULL){
|
||||
@@ -621,7 +657,7 @@ int main(int argc, char **argv){
|
||||
}
|
||||
|
||||
if(list_requested){
|
||||
list_all_art_styles();
|
||||
list_all_art_styles(list_requested);
|
||||
goto out;
|
||||
}
|
||||
if(!has_text){
|
||||
@@ -629,9 +665,10 @@ int main(int argc, char **argv){
|
||||
result = 1;
|
||||
goto out;
|
||||
}
|
||||
if(style >= (long)migucount){
|
||||
result = usage_error("style %ld does not exist; choose a value between 0 and %lu",
|
||||
style, (unsigned long)(migucount - 1));
|
||||
art_total = areyouteto ? tetocount : migucount;
|
||||
if(style >= (long)art_total){
|
||||
result = usage_error("style %ld does not exist for %s; choose a value between 0 and %lu",
|
||||
style, areyouteto ? "Teto" : "Miku", (unsigned long)(art_total - 1));
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -658,9 +695,9 @@ int main(int argc, char **argv){
|
||||
goto out;
|
||||
}
|
||||
|
||||
draw_miku_says(text, (int)style);
|
||||
draw_miku_says(text, (int)style, (int)areyouteto);
|
||||
//i didn't know you could do labels like in assembly (nasm) this is very useful knowledge
|
||||
out:
|
||||
free(text);
|
||||
return result;
|
||||
} //ooooo 666 lines spookyyy evillll
|
||||
}
|
||||
Reference in new issue
Block a user