Current Path : /usr/bin/ |
|
Current File : //usr/bin/groffer |
#! /bin/sh
# groffer - display groff files
# Source file position: <groff-source>/contrib/groffer/groffer.sh
# Installed position: <prefix>/bin/groffer
# Copyright (C) 2001,2002,2003,2004,2005,2006
# Free Software Foundation, Inc.
# Written by Bernd Warken
# Last update: 3 Oct 2006
# This file is part of `groffer', which is part of `groff'.
# `groff' is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# `groff' is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with `groff'; see the files COPYING and LICENSE in the top
# directory of the `groff' source. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301,
# USA.
########################################################################
export GROFFER_OPT; # option environment for groffer
export _CONF_FILE_ETC; # configuration file in /etc
export _CONF_FILE_HOME; # configuration file in $HOME
export _CONF_FILES; # configuration files
_CONF_FILE_ETC='/etc/groff/groffer.conf';
_CONF_FILE_HOME="${HOME}/.groff/groffer.conf";
_CONF_FILES="${_CONF_FILE_ETC} ${_CONF_FILE_HOME}";
# characters
export _AT;
export _SP;
export _SQ;
export _TAB;
_AT='@';
_SP=' ';
_SQ="'";
_TAB=' ';
export _ERROR;
_ERROR='7'; # for syntax errors; no `-1' in `ash'
# @...@ constructs
export _BEFORE_MAKE;
if test _1.18.1.4_ = _${_AT}VERSION${_AT}_
then
# script before `make'
_BEFORE_MAKE='yes';
else
_BEFORE_MAKE='no';
fi;
export _AT_BINDIR_AT;
export _AT_G_AT;
export _AT_LIBDIR_AT;
export _GROFFER_LIBDIR;
case "${_BEFORE_MAKE}" in
yes)
self="$0";
case "${self}" in
/*) :; ;;
*)
curdir="$(pwd)";
case "${curdir}" in
*/)
self="${curdir}${self}";
;;
*)
self="${curdir}/${self}";
;;
esac;
;;
esac;
groffer_shell_dir="$(dirname ${self})";
case "${groffer_shell_dir}" in
*/) :; ;;
*) groffer_shell_dir="${groffer_shell_dir}/";
esac;
_AT_G_AT='';
_AT_BINDIR_AT="${groffer_shell_dir}";
_AT_LIBDIR_AT="${groffer_shell_dir}";
_GROFFER_LIBDIR="${_AT_LIBDIR_AT}";
;;
no)
_AT_G_AT='';
_AT_BINDIR_AT='/usr/bin';
case "${_AT_BINDIR_AT}" in
*/) :; ;;
*) _AT_BINDIR_AT="${_AT_BINDIR_AT}/";
esac;
_AT_LIBDIR_AT='/usr/lib64';
case "${_AT_LIBDIR_AT}" in
*/) :; ;;
*) _AT_LIBDIR_AT="${_AT_LIBDIR_AT}/";
esac;
_GROFFER_LIBDIR="${_AT_LIBDIR_AT}"'groff/groffer/';
;;
esac;
if test -f "${_GROFFER_LIBDIR}"'version.sh'
then
. "${_GROFFER_LIBDIR}"'version.sh';
fi;
export _GROFF_VERSION;
case "${_BEFORE_MAKE}" in
yes)
_GROFF_VERSION="${_GROFF_VERSION_PRESET}";
;;
no)
_GROFF_VERSION='1.18.1.4';
;;
esac;
export _GROFFER2_SH; # file name of the script that follows up
_GROFFER2_SH="${_GROFFER_LIBDIR}${_GROFF_VERSION}"'groffer2.sh';
export _GROFFER_SH; # file name of this shell script
case "$0" in
*groffer*)
_GROFFER_SH="$0";
;;
*)
echo 'The groffer script should be started directly.' >&2
exit 1;
;;
esac;
export _NULL_DEV;
if test -c /dev/null
then
_NULL_DEV="/dev/null";
else
_NULL_DEV="NUL";
fi;
# Test of the `$()' construct.
if test _"$(echo "$(echo 'test')")"_ \
!= _test_
then
echo 'The "$()" construct did not work.' >&2;
exit "${_ERROR}";
fi;
# Test of sed program
if test _"$(echo red | sed -e 's/r/s/')"_ != _sed_
then
echo 'The sed program did not work.' >&2;
exit "${_ERROR}";
fi;
########################### configuration
# read and transform the configuration files, execute the arising commands
for f in "${_CONF_FILE_HOME}" "${_CONF_FILE_ETC}"
do
if test -f "$f"
then
o=""; # $o means groffer option
# use "" quotes because of ksh and posh
eval "$(cat "$f" | sed -n -e '
# Ignore comments
/^['"${_SP}${_TAB}"']*#/d
# Delete leading and final space
s/^['"${_SP}${_TAB}"']*//
s/['"${_SP}${_TAB}"']*$//
# Print all lines with shell commands, those not starting with -
/^[^-]/p
# Remove all single and double quotes
s/['"${_SQ}"'"]//g
# Replace empty arguments
s/^\(-[^ ]*\)=$/o="${o} \1 '"${_SQ}${_SQ}"'"/p
# Replace division between option and argument by single space
s/[='"${_SP}${_TAB}"']['"${_SP}${_TAB}"']*/'"${_SP}"'/
# Handle lines without spaces
s/^\(-[^'"${_SP}"']*\)$/o="${o} \1"/p
# Encircle the remaining arguments with single quotes
s/^\(-[^ ]*\) \(.*\)$/o="${o} \1 '"${_SQ}"'\2'"${_SQ}"'"/p
')"
# Remove leading space
o="$(echo "$o" | sed -e 's/^ *//')";
if test _"${o}"_ != __
then
if test _"{GROFFER_OPT}"_ = __
then
GROFFER_OPT="${o}";
else
GROFFER_OPT="${o} ${GROFFER_OPT}";
fi;
fi;
fi;
done;
# integrate $GROFFER_OPT into the command line; it isn't needed any more
if test _"${GROFFER_OPT}"_ != __
then
eval set x "${GROFFER_OPT}" '"$@"';
shift;
GROFFER_OPT='';
fi;
########################### Determine the shell
export _SHELL;
# use "``" instead of "$()" for using the case ")" construct
# do not use "" quotes because of ksh
_SHELL=`
# $x means list.
# $s means shell.
# The command line arguments are taken over.
# Shifting herein does not have an effect outside.
export x;
case " $*" in
*\ --sh*) # abbreviation for --shell
x='';
s='';
# determine all --shell arguments, store them in $x in reverse order
while test $# != 0
do
case "$1" in
--shell|--sh|--she|--shel)
if test "$#" -ge 2
then
s="$2";
shift;
fi;
;;
--shell=*|--sh=*|--she=*|--shel=*)
# delete up to first "=" character
s="$(echo x"$1" | sed -e 's/^x[^=]*=//')";
;;
*)
shift;
continue;
esac;
if test _"${x}"_ = __
then
x="'${s}'";
else
x="'${s}' ${x}";
fi;
shift;
done;
# from all possible shells in $x determine the first being a shell
# or being empty
s="$(
# "" quotes because of posh
eval set x "${x}";
shift;
if test $# != 0
then
for i
do
if test _"$i"_ = __
then
# use the empty argument as the default shell
echo empty;
break;
else
# test $i on being a shell program;
# use this kind of quoting for posh
if test _"$(eval "$i -c 'echo ok'" 2>${_NULL_DEV})"_ = _ok_ >&2
then
# shell found
cat <<EOF
${i}
EOF
break;
else
# if not being a shell go on searching
continue;
fi;
fi;
done;
fi;
)";
if test _"${s}"_ != __
then
cat <<EOF
${s}
EOF
fi;
;;
esac;
`
########################### test fast shells for automatic run
if test _"${_SHELL}"_ = __
then
for s in ksh ash dash pdksh zsh posh
do
if test _"$(eval "$s -c 'echo ok'" 2>${_NULL_DEV})"_ = _ok_ >&2
then
_SHELL="$s";
break;
fi;
done;
fi;
########################### start groffer2.sh
if test _"${_SHELL}"_ = _empty_
then
_SHELL='';
fi;
if test _"${_SHELL}"_ = __
then
# no shell found, so start groffer2.sh normally
#eval . "'${_GROFFER2_SH}'" '"$@"';
eval . "/usr/share/groff/${_GROFF_VERSION}/groffer/groffer2.sh" '"$@"';
exit;
else
# start groffer2.sh with the found $_SHELL
# do not quote $_SHELL to allow arguments
eval exec "${_SHELL} '${_GROFFER2_SH}'" '"$@"';
exit;
fi;
Copyright 2K16 - 2K18 Indonesian Hacker Rulez