2023-12-30 10:22:50 +01:00
#!/bin/bash
2024-01-03 02:47:46 +01:00
# pixelfloot - a pixelflut client written in bash
# this script was made during the 37c3
# pixelflut.la10cy.net - 130.185.104.31
# my small pixelflut test server, feel free to have fun with it! :)
# You can watch the board by VNC at port 5900, max connections are 2
test -z " $IPFLOOT " && IPFLOOT = "130.185.104.31"
test -z " $FLOOTPORT " && FLOOTPORT = "1234"
2024-01-02 02:08:37 +01:00
########################################################################
FNAME = " $( echo $2 | sed -e 's/\..*$//' -e 's/^images\///' ) "
IMGFILE = " $2 "
PPMFILE = " $FNAME .ppm "
HEXPPM = " images/ $FNAME .hexppm "
2024-01-02 02:19:05 +01:00
PIXLIST = " /tmp/ $FNAME .pixlist "
2024-01-02 02:08:37 +01:00
SHUFMODE = " $3 "
2023-12-30 10:22:50 +01:00
2024-01-02 02:43:54 +01:00
FLOOTSRUNNING = 0
2024-01-02 02:19:05 +01:00
test -z " $FLOOTFORKS " && FLOOTFORKS = "2"
2024-01-01 07:42:04 +01:00
2024-01-05 00:45:31 +01:00
test -z $X_MAX && X_MAX = 800
test -z $Y_MAX && Y_MAX = 600
test -z $X && X = 0
test -z $Y && Y = 0
2024-01-04 03:34:36 +01:00
## bounce
XDIR = 0
YDIR = 0
2024-01-05 01:14:14 +01:00
test -z " $BOUNCESTEP " && BOUNCESTEP = 2
2024-01-04 03:34:36 +01:00
## end bounce
2023-12-30 10:22:50 +01:00
declare -a PIXMAP
declare -a LOL
declare -a LOLPID
2024-01-03 03:43:37 +01:00
# colors for colored output 8)
RED = "\e[31m"
GREEN = "\e[32m"
YELLOW = "\e[33m"
ENDCOLOR = "\e[0m"
function message( ) {
case $1 in
warn)
MESSAGE_TYPE = " ${ YELLOW } WARN ${ ENDCOLOR } "
; ;
error)
MESSAGE_TYPE = " ${ RED } ERROR ${ ENDCOLOR } "
; ;
info| *)
MESSAGE_TYPE = " ${ GREEN } INFO ${ ENDCOLOR } "
; ;
esac
if [ " $1 " = = "info" ] || [ " $1 " = = "warn" ] || [ " $1 " = = "error" ]
then
MESSAGE = $2
else
MESSAGE = $1
fi
echo -e " [ ${ MESSAGE_TYPE } ] $MESSAGE "
}
error ( )
{
message error " ${ RED } ERROR!! ${ ENDCOLOR } "
exit 1
}
###### OLDFOOO ######
2023-12-30 10:22:50 +01:00
# https://gist.github.com/nberlette/e3e303a81f2c41927bf4fe90fb89d97f
function hex( ) {
printf "%02X%02X%02X" ${ *// ',' / ' ' }
}
gen_pixmap( ) {
y = 0
while read -r LINE
do
if [ " $y " -gt 2 ]
then
for x in $( seq 1 $x_ppm )
do
REDindex = $(( x*3-2))
GREENindex = $(( x*3+1-2))
BLUEindex = $(( x*3+2-2))
REDvalue = " $( echo $LINE | cut -d ' ' -f${ REDindex } ) "
GREENvalue = " $( echo $LINE | cut -d ' ' -f${ GREENindex } ) "
BLUEvalue = " $( echo $LINE | cut -d ' ' -f${ BLUEindex } ) "
PIXELcolor = " $( hex ${ REDvalue } $GREENvalue $BLUEvalue ) "
PIXMAP[ $y ] = " ${ PIXMAP [ $y ] } $PIXELcolor "
done
echo "please wait"
echo ${ PIXMAP [ $y ] } >> $HEXPPM
elif [ " $y " -eq 1 ]
then
x_ppm = " $( echo " $LINE " | cut -d ' ' -f1) "
fi
y = $(( y+1))
#~ for col in $LINE
#~ do
#~ case $count in
#~ 0) RED="$(hex $col)"
#~ ;;
#~ 1) GREEN="$(hex $col)"
#~ ;;
#~ 2) BLUE="$(hex $col)"
#~ ;;
#~ esac
#~ count=$((count+1))
#~ test $count -ge 2 && count=0
#~ done
done < " $PPMFILE "
}
draw_pixmap( ) {
y = 1
2024-01-01 05:44:55 +01:00
test -z $x_ppm && echo "x_ppm missing" && exit 1
2023-12-30 10:22:50 +01:00
while read -r LINE
do
2024-01-01 05:44:55 +01:00
for x in $( seq 1 $x_ppm )
2023-12-30 10:22:50 +01:00
do
2024-01-01 05:44:55 +01:00
# when Color is FF00FE draw rainbow background
2023-12-30 11:37:49 +01:00
if [ [ " $( echo $LINE | cut -d ' ' -f$x ) " != "FF00FE" ] ]
then
echo "please wait"
2024-01-01 05:44:55 +01:00
echo " PX $x $y $( echo $LINE | cut -d ' ' -f$x ) " >> $PIXLIST
# magnify double size
#echo "PX $((x*2)) $((y*2)) $(echo $LINE | cut -d ' ' -f$x)" >> $PIXLIST
#echo "PX $((x*2+1)) $((y*2)) $(echo $LINE | cut -d ' ' -f$x)" >> $PIXLIST
#echo "PX $((x*2)) $((y*2+1)) $(echo $LINE | cut -d ' ' -f$x)" >> $PIXLIST
#echo "PX $((x*2+1)) $((y*2+1)) $(echo $LINE | cut -d ' ' -f$x)" >> $PIXLIST
2023-12-30 11:37:49 +01:00
else
2023-12-30 13:11:33 +01:00
2023-12-30 13:27:55 +01:00
if [ " $y " -lt 32 ]
2023-12-30 13:11:33 +01:00
then
RAINBOWCOLOR = " $( hex 0 0 255) "
2023-12-30 13:27:55 +01:00
elif [ " $y " -lt 64 ]
2023-12-30 13:11:33 +01:00
then
RAINBOWCOLOR = " $( hex 0 255 255) "
2023-12-30 13:27:55 +01:00
elif [ " $y " -lt 94 ]
2023-12-30 13:11:33 +01:00
then
RAINBOWCOLOR = " $( hex 0 255 0) "
2023-12-30 13:27:55 +01:00
elif [ " $y " -lt 126 ]
2023-12-30 13:11:33 +01:00
then
RAINBOWCOLOR = " $( hex 255 255 0) "
else
RAINBOWCOLOR = " $( hex 255 0 0) "
fi
#~ if [ "$y" -lt 16 ]
#~ then
#~ RAINBOWCOLOR="$(hex 0 0 $(((y+1)*16)))"
#~ elif [ "$y" -lt 32 ]
#~ then
#~ RAINBOWCOLOR="$(hex 0 $(((y-16)*16)) 255)"
#~ elif [ "$y" -lt 48 ]
#~ then
#~ RAINBOWCOLOR="$(hex 0 $((y*16)) $((16-(y-32)*16)))"
#~ elif [ "$y" -lt 64 ]
#~ then
#~ RAINBOWCOLOR="$(hex $((y*16)) $((y*16)) 0)"
#~ else
#~ RAINBOWCOLOR="$(hex $((y*16)) 0 0)"
#~ fi
2023-12-30 11:37:49 +01:00
echo "please wait for rainbow"
echo " PX $(( x*2)) $(( y*2)) $RAINBOWCOLOR " >> $PIXLIST
echo " PX $(( x*2+1)) $(( y*2)) $RAINBOWCOLOR " >> $PIXLIST
echo " PX $(( x*2)) $(( y*2+1)) $RAINBOWCOLOR " >> $PIXLIST
echo " PX $(( x*2+1)) $(( y*2+1)) $RAINBOWCOLOR " >> $PIXLIST
fi
2023-12-30 10:22:50 +01:00
done
y = $(( y+1))
done < " $HEXPPM "
}
2024-01-02 02:43:54 +01:00
###### END OLDFOOO ######
gen_field( ) {
test -z $W && W = 640
test -z $H && H = 480
test -z $COLOR && COLOR = "666999"
2024-01-03 03:43:37 +01:00
message " drawing ${ YELLOW } $W x $H - $COLOR ${ ENDCOLOR } " >& 2
2024-01-02 02:49:27 +01:00
for x in $( seq 0 $W )
2024-01-02 02:43:54 +01:00
do
2024-01-02 02:49:27 +01:00
for y in $( seq 0 $H )
2024-01-02 02:43:54 +01:00
do
echo " PX $x $y $COLOR "
done
done
}
2024-01-02 02:08:37 +01:00
convertimg( ) {
2024-01-04 23:00:22 +01:00
2024-01-02 02:08:37 +01:00
if [ -n " $RESIZE " ]
then
RESIZE = " -resize $RESIZE "
fi
2024-01-04 02:48:58 +01:00
convert $IMGFILE $RESIZE txt: | tail -n +2 | awk '{print $1 $3}' | sed -e 's/\,/ /' -e 's/\:/ /' -e 's/\#//' -e 's/^/PX /'
2024-01-02 02:08:37 +01:00
}
2024-01-03 21:48:02 +01:00
#~ generate_text() {
#~ }
2024-01-04 03:34:36 +01:00
2024-01-04 20:11:19 +01:00
xymode( ) {
2023-12-30 21:55:03 +01:00
case $SHUFMODE in
2024-01-05 00:45:31 +01:00
chaos) OFFSET = " OFFSET $( shuf -i 0-$X_MAX -n 1) $( shuf -i 0-$Y_MAX -n 1) "
2023-12-30 21:55:03 +01:00
; ;
2024-01-05 00:45:31 +01:00
shake) OFFSET = " OFFSET $( shuf -i $X -$(( $X + 10 )) -n 1) $( shuf -i $Y -$(( $Y + 10 )) -n 1) "
2023-12-30 21:55:03 +01:00
; ;
2024-01-04 20:11:19 +01:00
cursor) OFFSET = " OFFSET $( xdotool getmouselocation | tr ':' ' ' | awk '{print $2 " " $4}' ) "
2024-01-01 04:32:22 +01:00
; ;
2024-01-04 02:48:58 +01:00
2024-01-04 03:34:36 +01:00
bounce)
2024-01-04 03:16:54 +01:00
# every call is a run in a loop
# in every run we count x or y alternativ one up or down
# we decide with with var 'xory', 0 is x , 1 is y
# up or down ist set with 'xdir' and 'ydir'
# 0 means up, 1 means down
#
2024-01-04 03:34:36 +01:00
# handled outsite, in the flootworker()
2024-01-05 00:45:31 +01:00
2024-01-04 19:26:35 +01:00
if [ $XDIR = = 0 ]
then
2024-01-05 00:45:31 +01:00
X = $(( $X + $BOUNCESTEP ))
test $X -ge $X_MAX && XDIR = 1
2024-01-04 19:26:35 +01:00
else
2024-01-05 00:45:31 +01:00
X = $(( $X - $BOUNCESTEP ))
test $X -eq 0 && XDIR = 0
2024-01-04 19:26:35 +01:00
fi
if [ $YDIR = = 0 ]
then
2024-01-05 00:45:31 +01:00
Y = $(( $Y + $BOUNCESTEP ))
test $Y -ge $Y_MAX && YDIR = 1
2024-01-04 19:26:35 +01:00
else
2024-01-05 00:45:31 +01:00
Y = $(( $Y - $BOUNCESTEP ))
test $Y -eq 0 && YDIR = 0
2024-01-04 19:26:35 +01:00
fi
2024-01-05 00:45:31 +01:00
OFFSET = " OFFSET $X $Y "
2024-01-04 02:48:58 +01:00
; ;
2024-01-02 03:41:38 +01:00
2024-01-05 00:45:31 +01:00
static| *) test -z $X && X = 0
test -z $Y && Y = 0
OFFSET = " OFFSET $X $Y "
2024-01-02 03:41:38 +01:00
; ;
2023-12-30 21:55:03 +01:00
esac
#
#
2023-12-30 10:22:50 +01:00
#echo "OFFSET $(shuf -i 0-1760 -n 1) 919"
2023-12-30 21:55:03 +01:00
2023-12-30 10:22:50 +01:00
#echo > /dev/null
#~ echo "OFFSET $sx $sy"
#~ sx=$((sx+1))
#~ sy=$((sy+1))
#~ test $sx -gt 1760 && sx=0
#~ test $sy -gt 920 && sy=0
}
2024-01-02 02:08:37 +01:00
flootworker( )
2024-01-04 23:25:52 +01:00
{
2024-01-02 02:08:37 +01:00
while true
do
2024-01-02 02:43:54 +01:00
#FLOOTSRUNNING=$((FLOOTSRUNNING+1))
#test $FLOOTSRUNNING -le $FLOOTFORKS &&
2024-01-04 03:34:36 +01:00
2024-01-04 20:11:19 +01:00
xymode
2024-01-04 19:26:35 +01:00
echo " $OFFSET
2024-01-04 23:45:24 +01:00
${ LOL [ $1 ] } " #> /dev/tcp/ $IPFLOOT / $FLOOTPORT || message warn " transmission in worker ${ YELLOW } $1 ${ ENDCOLOR } ${ RED } failed${ ENDCOLOR } - maybe you need to decrease ${ YELLOW } FLOOTFORKS${ ENDCOLOR } or expand/tune your uplink"
2024-01-02 02:43:54 +01:00
#FLOOTSRUNNING=$((FLOOTSRUNNING-1))
2024-01-02 02:08:37 +01:00
#echo "${LOL[$i]}" > /dev/tcp/127.0.0.1/1337 &
#echo "worker $i PID ${LOLPID[$i]}"
2024-01-04 22:38:49 +01:00
done > /dev/tcp/$IPFLOOT /$FLOOTPORT || message warn " transmission in worker ${ YELLOW } $1 ${ ENDCOLOR } ${ RED } failed ${ ENDCOLOR } - maybe you need to decrease ${ YELLOW } FLOOTFORKS ${ ENDCOLOR } or expand/tune your uplink "
2024-01-02 02:08:37 +01:00
}
2024-01-03 03:10:11 +01:00
checkfile( ) {
2024-01-04 23:25:52 +01:00
if [ ! -f $1 ] || [ -z $1 ]
2024-01-03 03:10:11 +01:00
then
2024-01-03 03:43:37 +01:00
message error " file ${ YELLOW } $1 ${ ENDCOLOR } does not exist. "
2024-01-03 03:10:11 +01:00
exit 1
fi
}
2024-01-04 20:11:19 +01:00
loadLOL( ) {
2024-01-04 21:37:54 +01:00
2024-01-04 20:11:19 +01:00
for i in $( seq 1 $FLOOTFORKS )
do
if [ -z " $ALPHACOLOR " ]
then
message " shuffle pixels for worker ${ YELLOW } ${ i } ${ ENDCOLOR } "
LOL[ $i ] = " $( echo " $LOL_org " | shuf) "
else
message " remove aplha color ${ YELLOW } ${ ALPHACOLOR } ${ ENDCOLOR } and shuffle pixels for worker ${ YELLOW } ${ i } ${ ENDCOLOR } "
LOL[ $i ] = " $( echo " $LOL_org " | grep -v $ALPHACOLOR | shuf) "
fi
done
2024-01-04 21:37:54 +01:00
2024-01-04 20:11:19 +01:00
}
2023-12-30 10:22:50 +01:00
floot( ) {
2024-01-04 22:38:49 +01:00
2024-01-04 20:11:19 +01:00
case $FNAME in
2024-01-04 22:38:49 +01:00
# small stupid animation, two alternating images
2024-01-04 20:11:19 +01:00
winketuxS)
2024-01-03 03:43:37 +01:00
message "drawing winketuxS animation"
2024-01-02 02:19:05 +01:00
LOL[ 1] = " $( cat pixlists/${ FNAME } 1.pixlist | shuf) "
LOL[ 2] = " $( cat pixlists/${ FNAME } 2.pixlist | shuf ) "
LOL[ 3] = " $( cat pixlists/${ FNAME } 2.pixlist | shuf ) "
2023-12-30 17:21:30 +01:00
#LOL[3]="$(cat $FNAME-mc.pixlist.2 | shuf)"
2024-01-04 20:11:19 +01:00
; ;
fill)
2024-01-03 03:43:37 +01:00
message " generating color field with ${ YELLOW } $FLOOTFORKS ${ ENDCOLOR } workers "
2024-01-01 07:42:04 +01:00
LOL_org = " $( gen_field) "
2024-01-05 00:45:31 +01:00
loadLOL
2024-01-04 20:11:19 +01:00
; ;
"" | text)
test -z " $TEXT " && TEXT = " $0 "
2024-01-05 00:45:31 +01:00
test -z " $FONTSIZE " && FONTSIZE = 42
2024-01-03 21:48:02 +01:00
test -z " $COLOR " && COLOR = "000000"
test -z " $BGCOLOR " && BGCOLOR = "FFFFFF"
if [ -n " $SIZE " ]
then
SIZE = " -size $SIZE "
fi
#convert -fill lightgreen -background white -pointsize 40 caption:"KARTTUR" -quality 72 DstImage.png
2024-01-05 00:45:31 +01:00
message " generating text, size $FONTSIZE for ${ YELLOW } $FLOOTFORKS ${ ENDCOLOR } workers "
LOL_org = " $( convert ${ SIZE } +antialias -depth 8 -fill \# ${ COLOR } -background \# ${ BGCOLOR } -pointsize ${ FONTSIZE } caption:" ${ TEXT } " -quality 72 txt: | tail -n +2 | awk '{print $1 $3}' | sed -e 's/\,/ /' -e 's/\:/ /' -e 's/\#//' -e 's/^/PX /' ) "
2024-01-03 21:48:02 +01:00
2024-01-04 20:11:19 +01:00
loadLOL
; ;
*)
2024-01-02 02:19:05 +01:00
# generate a tmp file, as i have trouble atm to figure out
# why free space get lost when i generate the pixlist directly
# in ram
2024-01-03 03:10:11 +01:00
if [ $USECACHE ]
then
checkfile $PIXLIST
2024-01-03 03:43:37 +01:00
message " using cache from ${ YELLOW } $PIXLIST ${ ENDCOLOR } "
2024-01-04 20:11:19 +01:00
LOL_org = " $( cat $PIXLIST ) "
2024-01-03 03:10:11 +01:00
else
checkfile $IMGFILE
2024-01-04 20:11:19 +01:00
message " convertimg image file ${ YELLOW } ${ IMGFILE } ${ ENDCOLOR } "
LOL_org = " $( convertimg) "
#convertimg > $PIXLIST
2024-01-03 03:10:11 +01:00
fi
2024-01-04 22:52:35 +01:00
2023-12-30 17:21:30 +01:00
#LOL[$i]="OFFSET 1 200"
#LOL[$i]="OFFSET $(shuf -i 0-1760 -n 1) $(shuf -i 0-920 -n 1)"
# LOL[$i]="$(shuf_xy)"
2024-01-02 02:08:37 +01:00
#LOL[$i]="$(cat $PIXLIST | shuf)"
2024-01-03 03:43:37 +01:00
message " prepare worker ${ YELLOW } $i ${ ENDCOLOR } .. "
2024-01-04 20:11:19 +01:00
#set -x
loadLOL
#set +x
2024-01-03 03:43:37 +01:00
message " ${ GREEN } DONE! ${ ENDCOLOR } "
2024-01-04 20:11:19 +01:00
; ;
esac
2023-12-30 11:37:49 +01:00
2024-01-03 03:43:37 +01:00
message " starting $FLOOTFORKS workers "
2024-01-02 02:08:37 +01:00
while true
do
for i in $( seq $FLOOTFORKS )
do
#echo "check worker $i PID ${LOLPID[$i]} if running "
if [ -z ${ LOLPID [ $i ] } ] || ! ps -p ${ LOLPID [ $i ] } > /dev/null
then
2024-01-03 03:43:37 +01:00
message " worker ${ YELLOW } $i ${ ENDCOLOR } is not running, starting it "
2024-01-02 02:43:54 +01:00
#if [ "$FLOOTSRUNNING" -le "$FLOOTFORKS" ]
#then
2024-01-03 03:43:37 +01:00
flootworker $i &
2024-01-02 02:43:54 +01:00
LOLPID[ $i ] = $!
#fi
2024-01-02 02:08:37 +01:00
fi
done
done
2023-12-30 10:22:50 +01:00
}
case $1 in
2024-01-02 03:24:52 +01:00
### DEPRECATED - JUST FOR TESTING
2023-12-30 10:22:50 +01:00
draw_pixmap) draw_pixmap
; ;
gen_pixmap) gen_pixmap
; ;
2024-01-02 03:24:52 +01:00
### END DEPRECATED - JUST FOR TESTING
2024-01-01 05:44:55 +01:00
convertimg)
2024-01-02 03:24:52 +01:00
# old way
2024-01-02 02:08:37 +01:00
##gen_pixmap
##draw_pixmap
2024-01-02 03:24:52 +01:00
# convert arbeitsplatz.jpg txt: | tail -n +2 | awk '{print $1 $3}'
# this is probably better
2024-01-04 23:25:52 +01:00
checkfile $IMGFILE
message " generating pixlist cachefile from ${ YELLOW } ${ IMGFILE } ${ ENDCOLOR } "
2024-01-02 02:08:37 +01:00
convertimg > $PIXLIST
2024-01-04 23:25:52 +01:00
message " file ${ YELLOW } ${ PIXLIST } ${ ENDCOLOR } generated, you can use it with ${ GREEN } USECACHE=true $0 floot ${ IMGFILE } ${ YELLOW } "
2024-01-01 05:44:55 +01:00
; ;
2024-01-03 03:43:37 +01:00
floot) message " flooting ${ YELLOW } ${ IPFLOOT } : ${ FLOOTPORT } ${ ENDCOLOR } "
2024-01-05 00:45:31 +01:00
#~ if [ "$SHUFMODE" == "static" ] && ([ -z "$X" ] && [ -z "$Y" ])
#~ then
#~ echo "please specify coords with e.g. 'W=420 H=420 SHUFMODE=static $0 floot $FNAME" >&2
#~ exit 1
#~ fi
2024-01-03 16:04:09 +01:00
#~ message "request board size from ${YELLOW}${IPFLOOT}:${FLOOTPORT}${ENDCOLOR}"
#~ exec 5<>/dev/tcp/$IPFLOOT/$FLOOTPORT
#~ echo "SIZE" >&5
#~ #sleep 1
#~ BOARDSIZE="$(cat <&5)" &
#~ cat <&5 &
#~ sleep 1
2024-01-01 07:42:04 +01:00
2024-01-03 16:04:09 +01:00
#~ exec 5<&-
#~ message "$BOARSIZE"
2024-01-04 20:11:19 +01:00
case $SHUFMODE in
cursor)
if ! command -v xdotool > /dev/null
then
message error " ${ YELLOW } xdotool ${ ENDCOLOR } not found "
exit 1
fi
; ;
*)
2024-01-04 23:00:22 +01:00
2024-01-04 20:11:19 +01:00
; ;
esac
2024-01-04 23:00:22 +01:00
if ! command -v convert > /dev/null
then
message error " ${ YELLOW } convert ${ ENDCOLOR } not found "
exit 1
fi
message " all requirements satisfied ${ GREEN } :) ${ ENDCOLOR } "
2024-01-04 20:11:19 +01:00
floot
2023-12-30 10:22:50 +01:00
; ;
*)
2024-01-03 21:48:02 +01:00
echo " $0 [floot|convertimg] [FILENAME|fill|text] ([MODE]) "
2024-01-05 00:45:31 +01:00
echo ""
echo "floot: flooting the target specified with IPFLOOT"
echo "convertimg: converts an image to a command list file in /tmp"
echo " to use it, start 'USECACHE=true $0 floot [FILENAME]', where FILENAME "
echo " is the original image file."
echo ""
echo "FILENAME: path to any picture imagemagick can handle"
echo "fill: create a filled area with (env COLOR, W (width), H (height), X, Y)"
echo "text: create a textbox (env TEXT, FONTSIZE, SIZE, COLOR, BGCOLOR)"
echo ""
2024-01-05 01:14:14 +01:00
echo "MODE: static (env X and Y for position)"
echo " chaos (env X_MAX and Y_MAX for position range)"
echo " shake (env X and Y for position range)"
2024-01-02 02:08:37 +01:00
echo " cursor"
2024-01-05 01:14:14 +01:00
echo " bounce (env Y_MAX and X_MAX for max bounce range, BOUNCESTEP for step size)"
2024-01-02 02:08:37 +01:00
echo ""
echo "available env vars to configure:"
2024-01-05 00:45:31 +01:00
echo "IPFLOOT(string), FLOOTPORT(int), USECACHE(bool), FLOOTFORKS(int)"
echo "SIZE(int), TEXT(string), FONTSIZE(int), BGCOLOR(hex), COLOR(hex)"
echo "X(int), Y(int), X_MAX(int), Y_MAX(int), H(int), W(int)"
2024-01-05 01:14:14 +01:00
echo "RESIZE(int), ALPHACOLOR(hex), BOUNCESTEP(int)"
2024-01-05 00:45:31 +01:00
2024-01-02 02:08:37 +01:00
exit 1
2023-12-30 10:22:50 +01:00
; ;
esac