Subversion Repositories pub

Compare Revisions

Ignore whitespace Rev 368 → Rev 369

/video-contact-sheet/branches/1.0.100a/vcs
59,7 → 59,7
# {{{ # CHANGELOG
# History (The full changelog can be found at <http://p.outlyer.net/vcs/files/CHANGELOG>).
#
# 1.0.100: (Focus on FreeBSD support -and hopefully POSIX compatibility-)
# 1.0.100: (Focus on FreeBSD support -and hopefully better POSIX compatibility-)
# * FEATURE: FreeBSD (7.1-RELEASE) support
# * COMPATIBILITY:
# - Call bash through env
71,9 → 71,12
# * BUGFIX: Don't fail if tput is unable to change colours
# * BUGFIX: Check for requirements before anything else
# * INTERNAL: Cache tput output
# * FEARTURE: Added -R / --randomsource. Mainly useful for debugging,
# also to repeat a set of results
# * FEATURE: Added -R / --randomseed. Mainly useful for debugging,
# also to repeat a set of results and compare outputs on different
# systems
# * Corrected info message in photos mode
# * INTERNAL: Added "--undocumented set_awk" (with -R and gawk produces
# the same output in different systems. Nawk doesn't though)
#
# }}} # CHANGELOG
 
148,6 → 151,7
# programs
# ERESED # see choose_eresed
# SEQ # see choose_seqw
 
# }}} # End of constants
 
# {{{ # Override-able variables
343,12 → 347,16
declare -i DISABLE_SHADOWS=0
declare -i DISABLE_TIMESTAMPS=0
 
# Sets which function is used to obtain random numbers
# valid values are bashrand and filerand
# Setting it manually will break it, calling with -R changes this
# to filerand
# Sets which function is used to obtain random numbers valid values are
# bashrand and awkrand.
# Setting it manually will break it, calling with -R changes this to awkrand.
# See awkrand for an explanation
declare RANDFUNCTION=bashrand
declare -i AWKRANDSEED=$RANDOM
 
# awk executable. For testing purposes it can be replaced, not configurable.
declare AWK=awk
 
# }}} # Variables
 
# {{{ # Configuration handling
544,36 → 552,27
}
 
# Wrapper around $RANDOM, not called directly, wrapped again in rand().
# See filerand() and rand() for an explanation.
# See rand() for an explanation.
bashrand() {
echo $RANDOM
}
 
# Prepares for "filerand()" calls
# File descriptor 7 is used to keep a file open, from which data is read
# and then transformed into a number.
# init_filerand($1 = filename)
init_filerand() { # [[FD1]], [[FD2]]
test -r "$1"
exec 7<"$1"
# closed in exithdlr
# Wrapper around a one-liner awk program producing a random number.
# See rand() for an explanation.
# Note bashrand() and awkrand() have different max. values.
awkrand() {
# AWK is mandatory as per SUS, so I guess checking for it is not required
# Note rand()*1e6 is ok for gawk but will produce values too close in
# nawk.
$AWK "BEGIN { srand($AWKRANDSEED); print int((rand()*1e9)%65536); }"
let 'AWKRANDSEED++'
}
 
# Produce a (not-really-)random number from a file not called directly,
# wrapped in rand()
# Note that once the file end is reached, the random values will always
# be the same (hash_string result for an empty string)
filerand() {
local b=
# "read 5 bytes from file descriptor 7 and put them in $b"
read -n5 -u7 b
hash_string "$b"
}
 
# produce a random number
# $RANDFUNCTION defines wich one to use (bashrand or filerand)
# for some reason setting RANDOM wasn't enough to make random values
# predicatable, so this is used to allow predictability on demand
# Produce a random number
# $RANDFUNCTION defines wich one to use (bashrand or awkrand).
# The need for this is that for some reason setting RANDOM wasn't enough to
# make random values predicatable, so this is used to allow predictability
# on demand (argument -R)
rand() {
$RANDFUNCTION
}
2486,11 → 2485,12
Imitates filmstrip look.
"random": Use '-kx' or '--funky random'
Randomizes colours and fonts.
-R <file>
--randomsource <file> Use the provided file to obtain \"random\" values.
Setting this makes otherwise random output (e.g. the
polaroid mode) to behave in a more predictable way:
repeated runs will produce the same output.
-R <number>
--randomseed <number> Use the provided number as a random seed: random values
won't be random any more, so two runs with the same
seed and same arguments will produce the same output in
modes using randomisation (e.g. the "photos" and
"polaroid" modes).
 
Options used for debugging purposes or to tweak the internal workings:
-M|--mplayer Force the usage of mplayer.
2557,7 → 2557,7
--long "interval:,numcaps:,username:,title:,from:,to:,stamp:,jpeg::,help,"\
"shoehorn:,mplayer,ffmpeg,height:,columns:,manual,aspect:,highlight:,"\
"extended::,fullname,anonymous,quiet,autoaspect,override:,mincho,funky:,"\
"end_offset:,disable:,dvd:,randomsource:" \
"end_offset:,disable:,dvd:,randomseed:,undocumented:" \
-n $0 -- "$@")
eval set -- "$TEMP"
 
2810,19 → 2810,23
esac
shift
;;
-R|--randomsource)
if [ ! -r "$2" ]; then
error "Can't use '$2' as a random source, a readable file is required."
exit $EX_USAGE
-R|--randomseed)
if ! is_number "$2"; then
# Non-numeric values ARE allowed as seed
hash_=$(hash_string "$2")
AWKRANDSEED=$hash_
inf "Using '$2' (=$hash_) as seed of semi-random values"
unset hash_
else
AWKRANDSEED="$2"
inf "Using '$2' as seed of semi-random values"
fi
init_filerand "$2"
RANDFUNCTION=filerand
inf "Using '$2' as source of semi-random values"
RANDFUNCTION=awkrand
shift
;;
-d|--disable) # Disable default features
case $(tolower "$2") in
# timestamp (no final s) is undocumented but will stay
# timestamp (with no final s) is undocumented but will stay
t|timestamps|timestamp)
if [ $DISABLE_TIMESTAMPS -eq 0 ]; then
inf "Timestamps disabled."
2865,6 → 2869,17
verbosity=$V_NONE
fi
;;
--undocumented)
# This is a container for, of course, undocumented functions
# These are used for testing/debugging purposes. Might (and will)
# change between versions, break easily and do no safety checks.
# In short, don't look at them unless told to do so :P
case "$2" in
set_awk=*) AWK="$(cut -d'=' -f2<<<"$2")" ; warn "[U] AWK=$AWK" ;;
*) false ;;
esac
shift
;;
-D) # Repeat to just test consistency
if [ $DEBUGGED -gt 0 ]; then exit ; fi
DEBUG=1