From 23c04846378d7861a1afa6edeaa94f6d151bbb53 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Tue, 23 Feb 2016 14:00:21 -0500 Subject: Old runtime library research scripts: Now you see them... Modification dates: research1.sh: 2016-02-13 14:44:30 -0500 research2.sh: 2016-02-13 19:25:25 -0500 research3.sh: 2016-02-14 17:56:33 -0500 research4.sh: 2016-02-23 01:26:54 -0500 --- (limited to 'research/research2.sh') diff --git a/research/research2.sh b/research/research2.sh new file mode 100644 index 0000000..9908495 --- /dev/null +++ b/research/research2.sh @@ -0,0 +1,111 @@ +#!/bin/sh + +################################################################################ +# shld +################################################################################ +__last_tu='' + +static() +{ + local arg= + local var= + local val= + local exp= + + for arg in "${@}"; do + case "${arg}" in + *=*) + var="${arg%%=*}" + val="$(printf "${arg#*=}" | \ + sed "s|'|'\\\\''|g")" + ;; + *) + var="${arg}" + val='' + ;; + esac + # Sanitize variable name. + case "${var}" in + [!A-Za-z_]* | *[!0-9A-Za-z_]*) + printf 'Syntax error: %s %s\n' \ + 'illegal static variable name:' \ + "${var}" >&2 + ;; + esac + # Set up static variable assignments to be evaluated on scope + # change. + exp="__${__tu}_static_var_vals=" + exp="${exp}\"\${__${__tu}_static_var_vals} ${var}='${val}'\"" + eval "${exp}" + # Set up list of static variables to be cleaned up on scope + # change. + exp="__${__tu}_static_vars=\"\${__${__tu}_static_vars} ${var}\"" + eval "${exp}" + # Set up static variables for current scope. + eval "${var}='${val}'" + done + + # Clean up static variables from previous scope. + if ! [ "x${__last_tu}" = 'x' ]; then + eval "unset \${__${__last_tu}_static_vars}" + fi + __last_tu="${__tu}" +} + +__set_up_static_vars() +{ + local tu="${1}" + + # Clean up static variables from previous scope. + if ! [ "x${__last_tu}" = 'x' ]; then + eval "unset \${__${__last_tu}_static_vars}" + fi + __last_tu="${tu}" + + # Set up static variables for specified scope. + eval "$(eval printf '%s' "\"$(eval printf '%s' \ + "'\${__${tu}_static_var_vals}'")\"")" +} + +################################################################################ +# TU 0 +################################################################################ +__tu='tu0' +__tu0_locals='' + +static static_var0='tu0 static_var0' + +tu0_fn0() +{ __set_up_static_vars 'tu0' + echo "tu0" + echo "\tstatic_var0: $static_var0" + echo "\tstatic_var1: $static_var1" +} + +################################################################################ +# TU 1 +################################################################################ +__tu='tu1' +__tu1_locals='' + +static static_var0='tu1 static_var0' +static static_var1='tu1 static_var1' + +tu1_fn0() +{ __set_up_static_vars 'tu1' + echo "tu1" + echo "\tstatic_var0: $static_var0" + echo "\tstatic_var1: $static_var1" +} + +################################################################################ +# TU 2 +################################################################################ +main() +{ + tu0_fn0 + tu1_fn0 + tu0_fn0 +} + +main "${@}" -- cgit v0.9.1