rockbox/apps/plugins/puzzles/genhelp.sh
Franklin Wei bf25f3e6e7 puzzles: compress extensive help text
This is only really needed to save a few bytes on the c200v2, but
since it adds negligible overhead, so it's implemented for all
targets.

A stripped down version of the LZ4 reference implementation is found
in lz4tiny.c.

Change-Id: Ib914ba71c84e04da282328662c752e533912e197
2017-08-16 11:40:37 -04:00

63 lines
1.5 KiB
Bash
Executable file

#!/bin/bash
# usage: ./genhelp.sh
#
# expects halibut to be installed in $PATH:
# http://www.chiark.greenend.org.uk/~sgtatham/halibut
#
# also requires host CC and lz4 library to be available
halibut --text src/puzzles.but
# preprocess the input
# strip leading whitespace
cat puzzles.txt | awk '{$1=$1; print}' > puzzles.txt.tmp
# cut at "Appendix A"
cat puzzles.txt.tmp | awk 'BEGIN { a=1; } /Appendix A/ { a = 0; } a==1' > puzzles.txt
rm puzzles.txt.tmp
# now split into different files
mkdir -p help
cat puzzles.txt | awk 'BEGIN { file = "none"; }
/#Chapter/ {
if($0 !~ / 1:/ && $0 !~ / 2:/)
{
if(file != "none")
print ";" > file;
file = "help/"tolower($3$4)".c";
if($3 ~ "Rectangles")
file = "help/rect.c";
print "/* auto-generated by genhelp.sh */" > file;
print "/* DO NOT EDIT! */" > file;
print "const char help_text[] = " > file; }
}
file != "none" {
gsub(/\\/,"\\\\");
if($0 !~ /Chapter/ && substr($0, 1, 1) == "#")
begin = "\\n";
else begin = "";
last = substr($0, length($0), 1);
if(length($0) == 0 || last == "|" || last == "-" || (term == "\\n" && last == "3"))
term="\\n";
else term = " ";
print "\"" begin $0 term "\"" > file;
}
END {
print ";" > file;
}
'
# now compress
for f in help/*
do
echo "Compressing: "$f
gcc compress.c $f -llz4 -o compress -O0
./compress > $f.tmp
mv $f.tmp $f
done
# generate quick help from gamedesc.txt
cat src/gamedesc.txt | awk -F ":" '{print "const char quick_help_text[] = \""$5"\";" >> "help/"$1".c" }'