From c6c87093d3d8857b44faa9c702b45e39c3e473c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Mon, 10 Sep 2012 23:42:19 +0200 Subject: EXPORT now knows the template we are in -- no need to pass it --- play.sh | 27 +++++++++++++++++++++------ templates/cdemu | 6 +++--- templates/default | 2 +- templates/fuseiso | 6 +++--- templates/iso | 12 ++++++++++++ 5 files changed, 40 insertions(+), 13 deletions(-) diff --git a/play.sh b/play.sh index 44b70c6..736c81e 100755 --- a/play.sh +++ b/play.sh @@ -32,6 +32,9 @@ typeset -A ENV EENV # current binary -- complete path BIN=${0:A} +# current template -- used for EXPORT +CUR_TEMPLATE=play + # global functions {{{1 # print passed arguments to stderr @@ -106,6 +109,10 @@ set_eenv () { inherit () { zparseopts -D e=nonfatal + local old_templ=$CUR_TEMPLATE + + CUR_TEMPLATE=$1 + if [[ ! -e $PLAY_TEMPLATES/$1 ]]; then if [[ -n $nonfatal ]]; then log "Template '$1' not found" @@ -116,17 +123,21 @@ inherit () { fi source $PLAY_TEMPLATES/$1 + + CUR_TEMPLATE=$old_templ } # function, that is used to _export_ the default phase functions -# i.e. 'EXPORT bla prepare' will set bla_prepare as the function being called +# i.e. 'EXPORT prepare' in template 'bla' will set bla_prepare as the function being called # on prepare() +# NB: this relies on CUR_TEMPLATE being correct -- DO NOT set CUR_TEMPLATE in a game file! EXPORT () { - local name=$1 - shift - for f in $@; do - eval "$f () { ${name}_${f}; }" + if [[ -n $PHASES[(r)$f] ]]; then + eval "$f () { ${CUR_TEMPLATE}_${f}; }" + else + log "Invalid phase function '$f' exported in $CUR_TEMPLATE" + fi done } @@ -137,6 +148,10 @@ ENV[DISPLAY]=":1" # phase functions {{{1 +# Array of phases +PHASES=(execute setenv run prepare cleanup) +declare -r PHASES + # to be removed play_execute () { exc -e startx $BIN -x $GAME -- $DISPLAY -ac -br -quiet ${=EXARGS} @@ -183,7 +198,7 @@ play_prepare () { play_cleanup () { } -EXPORT play execute prepare setenv run cleanup +EXPORT $PHASES[@] # internal functions {{{1 diff --git a/templates/cdemu b/templates/cdemu index 81a83b0..f978884 100644 --- a/templates/cdemu +++ b/templates/cdemu @@ -3,7 +3,7 @@ _cdemu_dev () { exc eval "cdemu device-mapping | grep \"^${CDEMU_NO}\" | tr -s ' ' | cut -f 2 -d' '" } -iso_prepare () { +cdemu_prepare () { default_prepare declare -g MOUNT CDEMU_NO @@ -15,11 +15,11 @@ iso_prepare () { exc mount $(_cdemu_dev) } -iso_cleanup () { +cdemu_cleanup () { exc umount $(_cdemu_dev) exc cdemu unload $CDEMU_NO } -EXPORT iso prepare cleanup +EXPORT prepare cleanup # vim:ft=sh diff --git a/templates/default b/templates/default index 9d7d7fc..7e856df 100644 --- a/templates/default +++ b/templates/default @@ -7,6 +7,6 @@ default_prepare () { [[ $PLAY_DEBUG == 0 ]] && ENV[WINEDEBUG]="-all" EENV[WINEPREFIX]='{ [[ -z $NO_WINEINSTS ]] && echo $HOME/.wineinsts/$PREFIX; } || echo $PREFIX' -EXPORT default prepare +EXPORT prepare # vim:ft=sh diff --git a/templates/fuseiso b/templates/fuseiso index 6096b4b..8baf63f 100644 --- a/templates/fuseiso +++ b/templates/fuseiso @@ -1,5 +1,5 @@ -iso_prepare () { +fuseiso_prepare () { default_prepare declare -g MOUNT MOUNTTARGET @@ -9,10 +9,10 @@ iso_prepare () { exc fuseiso -p $MOUNT $MOUNTTARGET } -iso_cleanup () { +fuseiso_cleanup () { exc fusermount -u $MOUNTTARGET } -EXPORT iso prepare cleanup +EXPORT prepare cleanup # vim:ft=sh diff --git a/templates/iso b/templates/iso index ce3fd74..2aad3cd 100644 --- a/templates/iso +++ b/templates/iso @@ -14,4 +14,16 @@ case $ISO_TYPE in *) die "Unknown ISO_TYPE: '$ISO_TYPE'";; esac + +# wrapper phases + +iso_prepare () { + ${ISO_TYPE}_prepare +} + +iso_cleanup () { + ${ISO_TYPE}_cleanup +} + +EXPORT prepare cleanup # vim:ft=sh -- cgit v1.2.3