diff options
Diffstat (limited to 'bin/sh/mkoptions.sh')
-rw-r--r-- | bin/sh/mkoptions.sh | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/bin/sh/mkoptions.sh b/bin/sh/mkoptions.sh deleted file mode 100644 index aecb6df..0000000 --- a/bin/sh/mkoptions.sh +++ /dev/null @@ -1,198 +0,0 @@ -#! /bin/sh - -# $NetBSD: mkoptions.sh,v 1.5 2017/11/15 09:21:19 kre Exp $ - -# -# It would be more sensible to generate 2 .h files, one which -# is for everyone to use, defines the "variables" and (perhaps) generates -# the externs (though they could just be explicit in options.h) -# and one just for options.c which generates the initialisation. -# -# But then I'd have to deal with making the Makefile handle that properly... -# (this is simpler there, and it just means a bit more sh compile time.) - -set -f -IFS=' ' # blank, tab (no newline) - -IF="$1" -OF="${3+$3/}$2" - -E_FILE=$(${MKTEMP:-mktemp} -t MKO.E.$$) -O_FILE=$(${MKTEMP:-mktemp} -t MKO.O.$$) -trap 'rm -f "${E_FILE}" "${O_FILE}"' EXIT - -exec 5> "${E_FILE}" -exec 6> "${O_FILE}" - -{ - printf '/*\n * File automatically generated by %s.\n' "$0" - printf ' * Do not edit, do not add to cvs.\n' - printf ' */\n\n' - - printf '#ifdef DEFINE_OPTIONS\n' - printf 'struct optent optlist[] = {\n' -} >"${OF}" - -FIRST=true - -${SED:-sed} <"${IF}" \ - -e '/^$/d' \ - -e '/^#/d' \ - -e '/^[ ]*\//d' \ - -e '/^[ ]*\*/d' \ - -e '/^[ ]*;/d' | -sort -b -k2,2f -k2,2 < "${IF}" | -while read line -do - # Look for comments in various styles, and ignore them - # (these should generally be already removed by sed above) - - case "${line}" in - '') continue;; - /*) continue;; - \**) continue;; - \;*) continue;; - \#*) continue;; - esac - - case "${line}" in - *'#if'*) - COND="${line#*#}" - COND="#${COND%%#*}" - ;; - *) - COND= - ;; - esac - set -- ${line%%[ ]#*} - - var="$1" name="$2" - - case "${var}" in - ('' | [!A-Za-z_]* | *[!A-Za-z0-9_]*) - printf >&2 "Bad var name: '%s'\\n" "${var}" - # exit 1 - continue # just ignore it for now - esac - - case "${name}" in - ?) set -- ${var} '' $name $3 $4; name= ;; - esac - - chr="$3" set="$4" dflt="$5" - - case "${chr}" in - -) chr= set= dflt="$4";; - ''|?) ;; - *) printf >&2 'flag "%s": Not a character\n' "${chr}"; continue;; - esac - - # options must have some kind of name, or they are useless... - test -z "${name}${chr}" && continue - - case "${set}" in - -) set= ;; - [01] | [Oo][Nn] | [Oo][Ff][Ff]) dflt="${set}"; set= ;; - ''|?) ;; - *) printf >&2 'set "%s": Not a character\n' "${set}"; continue;; - esac - - case "${dflt}" in - '') ;; - [Oo][Nn]) dflt=1;; - [Oo][Ff][Ff]) dflt=0;; - [01]) ;; - *) printf >&2 'default "%s" invalid, use 0 off 1 on\n'; continue;; - esac - - # validation complete, now to generate output - - if [ -n "${COND}" ] - then - printf '%s\n' "${COND}" >&4 - printf '%s\n' "${COND}" >&5 - printf '%s\n' "${COND}" >&6 - fi - - printf '\t_SH_OPT_%s,\n' "${var}" >&5 - - if [ -n "${name}" ] - then - printf ' { "%s", ' "${name}" >&4 - else - printf ' { 0, ' >&4 - fi - - if [ -n "${chr}" ] - then - printf "'%s', " "${chr}" >&4 - else - chr= - printf '0, ' >&4 - fi - - if [ -n "${set}" ] - then - printf "'%s', 0, " "${set}" >&4 - else - printf '0, 0, ' >&4 - fi - - if [ -n "${dflt}" ] - then - printf '%s },\n' "${dflt}" >&4 - else - printf '0 },\n' >&4 - fi - - printf '#define %s\toptlist[_SH_OPT_%s].val\n' "${var}" "${var}" >&6 - - if [ -n "${COND}" ] - then - printf '#endif\n' >&4 - printf '#endif\n' >&5 - printf '#endif\n' >&6 - fi - - test -z "${chr}" && continue - - printf '%s _SH_OPT_%s %s\n' "${chr}" "${var}" "${COND}" - -done 4>>"${OF}" | sort -t' ' -k1,1f -k1,1 | while read chr index COND -do - if $FIRST - then - printf ' { 0, 0, 0, 0, 0 }\n};\n' - printf '#endif\n\n' - - printf 'enum shell_opt_names {\n' - cat "${E_FILE}" - printf '};\n\n' - - printf '#ifdef DEFINE_OPTIONS\n' - printf 'const unsigned char optorder[] = {\n' - FIRST=false - fi - [ -n "${COND}" ] && printf '%s\n' "${COND}" - printf '\t%s,\n' "${index}" - [ -n "${COND}" ] && printf '#endif\n' - -done >>"${OF}" - -{ - printf '};\n\n' - printf '#define NOPTS (sizeof optlist / sizeof optlist[0] - 1)\n' - printf 'int sizeof_optlist = sizeof optlist;\n\n' - printf \ - 'const int option_flags = (sizeof optorder / sizeof optorder[0]);\n' - printf '\n#else\n\n' - printf 'extern struct optent optlist[];\n' - printf 'extern int sizeof_optlist;\n' - printf 'extern const unsigned char optorder[];\n' - printf 'extern const int option_flags;\n' - printf '\n#endif\n\n' - - cat "${O_FILE}" -} >> "${OF}" - -exit 0 |