34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# CDDL HEADER START
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# The contents of this file are subject to the terms of the
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Common Development and Distribution License (the "License").
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# You may not use this file except in compliance with the License.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# See the License for the specific language governing permissions
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# and limitations under the License.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# When distributing Covered Code, include this CDDL HEADER in each
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# If applicable, add the following below this CDDL HEADER, with the
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# fields enclosed by brackets "[]" replaced with your own identifying
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# information: Portions Copyright [yyyy] [name of copyright owner]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# CDDL HEADER END
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# cpvprint - compound variable pretty printer
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# Make sure all math stuff runs in the "C" locale to avoid problems
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# with alternative # radix point representations (e.g. ',' instead of
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# '.' in de_DE.*-locales). This needs to be set _before_ any
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# floating-point constants are defined in this script).
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # do some "pretty-printing" for human users (the output is still a
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # (note: This does not scale well with large files)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz str="${str//$'\t'typeset -l -i /$'\t'integer }"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz getopts -a "${progname}" "${cpvprint_usage}" OPT '-?'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# HTML constants
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -r transitional=$'<!DOCTYPE html\n\tPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n\t"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -r xhtml=$'http://www.w3.org/1999/xhtml'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -r xml_head=$'<?xml version="1.0" encoding="UTF-8"?>\n'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# tree variable
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[-?\n@(#)\$Id: cpvprint (Roland Mainz) 2009-06-15 \$\n]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[-author?Roland Mainz <roland.mainz@nrubsig.org>]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[+NAME?cpvprint - render compound variable trees in various formats]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[+DESCRIPTION?\bcpvprint\b is converter which reads a ksh compound
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz variable and prints it on a different format. Supported
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz formats are \'default\', \'altdefault\',
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz \'tree\', \'alttree\',
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz \'pretty\', \'pretty.html\', \'list\' and \'fulllist\']
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzformat [ arguments ]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[+SEE ALSO?\bksh93\b(1), \bcpvlint\b(1)]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzwhile getopts -a "${progname}" "${cpvprint_usage}" OPT ; do
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# read variable
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz redirect {fd}<> "$1" || fatal_error $"Cannot open file."
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz read -u${fd} -C tree || fatal_error $"Read error."
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz redirect {fd}<&- || fatal_error $"Close error."
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print -u2 -f $"%s: Unsupported number of arguments.\n" "$0"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# print variable
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz # print variable tree (same as $ print -v filetree # except that it "looks better")
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf '%s%s<html xmlns="%s" xml:lang="en" lang="en">\n<head><meta name="generator" content="%H" /><title>%H</title></head>\n<body><pre>%H\n</pre></body></html>\n' \
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz "ksh Compound Variable Pretty Printer (cpvprint)" \
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz "$(prettyprint_compoundvar tree)" | iconv -f "UTF-8" - -
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz set | egrep '^tree.' | sed 's/^tree\.//' | egrep -v '^[[:alnum:]]+(\.([[:alnum:]\.]+)(\[.*\])*)*=\('