#!/bin/sh # $XConsortium: ttce2xdr.cpp /main/4 1996/04/21 19:11:34 drk $ # (c) Copyright 1996 Digital Equipment Corporation. # (c) Copyright 1993,1994,1996 Hewlett-Packard Company. # (c) Copyright 1993,1994,1996 International Business Machines Corp. # (c) Copyright 1992-1994,1996 Sun Microsystems, Inc. # (c) Copyright 1993,1994,1996 Novell, Inc. # (c) Copyright 1996 FUJITSU LIMITED. # (c) Copyright 1996 Hitachi. # # ttce2xdr - Convert ToolTalk Classing Engine tables to XDR types database # # usage # usage() { echo "$1: convert ToolTalk CE tables to XDR types database" echo "Usage: $1 [-xn][-d user|system]" echo " $1 [-xn]-d network [ []]" echo " $1 [-h]" echo " $1 [-v]" echo " -d database to read (default: all) and " echo " write (default: user)" echo " -n echo commands instead of executing them" echo " -h help" echo " -v version" echo " -x debug mode (pass 'set -x' to /bin/sh)" echo " OWv3 installation to read from" echo " OWv3 installation to write to" } # # version # version() { echo "CDE Version @CDE_VERSION_MAJOR@.@CDE_VERSION_MINOR@.@CDE_VERSION_MICRO@@CDE_VERSION_DEV@" } # # cleanup - Call me before exiting # cleanup() { rm -f /tmp/ttce2xdr.types.$$ /tmp/ttce2xdr.types.$$.deps /tmp/ttce2xdr.ceascii.$$ } # # nullit - create null ~/.tt/xdr.types so auto convert won't be run # next time # nullit() { test -d $HOME/.tt || mkdir $HOME/.tt touch $HOME/.tt/types.xdr } # # Main # trap cleanup 0 1 2 3 15 cmd=`basename $0` dryrun= database= ow1= ow2= # # Parse command line # args=$* while getopts hxnvrfd: option do case $option in h | \?) usage $cmd; exit 1;; x) set -x;; v) version $cmd; exit 1;; n) dryrun=1;; d) database=$OPTARG;; esac done # # Discard args processed by getopts # shift `expr $OPTIND - 1` # # Process mandatory args # if [ $# -gt 0 ]; then ow1=$1 shift if [ $# -gt 0 ]; then ow2=$1 shift fi fi # # Check for extraneous args # if [ $# -gt 0 ]; then usage $cmd exit 1 fi if [ "`set | grep TTHOME`" ]; then echo "\$TTHOME is set. $cmd does not support \$TTHOME." echo "Unset it and rerun $cmd, or run tt_type_comp(1) by hand." exit 1 fi if [ $database ]; then case $database in user | system | network) ;; *) echo "$cmd: bogus database: $database"; usage $cmd; exit 1;; esac dbopt="-d $database" else database="user" fi # if we are doing user (perhaps automatic) conversion. make # sure there is some conversion to do, otherwise we can bail out # early. if [ "$database" = "user" ]; then if [ ! -f $HOME/.cetables/cetables ]; then # user doesn't even have a cetables, nothing to do nullit exit 0 fi ce_db_build user -to_ascii /tmp/ttce2xdr.ceascii.$$ if egrep -s "NS_NAME=SUN_TOOLTALK_TYPES" /tmp/ttce2xdr.ceascii.$$ ; then : else # user has cetables, but no ToolTalk types nullit exit 0 fi # Now, we know the user has a cetables with ToolTalk types. Now # check for a possible malformed cetables with no ToolTalk name # space definition. if egrep -s '^NS_ATTR=$' /tmp/ttce2xdr.ceascii.$$ ; then # The cetables exists, and has ToolTalk types, but # since the basic definitions in the network CE database # may be gone, we need to add them back in. Eventually # in a future release we should remove all ToolTalk info # from user's cetables. ed /tmp/ttce2xdr.ceascii.$$ >/dev/null <<- 'EOF' /^NS_ATTR=$/d i NS_ATTR=((NS_MANAGER,string,<$CEPATH/tns_mgr.so>) ) . /^NS_ENTRIES=/a (TYPE_NAME,string,) (TYPE_NAME,string,) (TT_OP,string,) (TT_ARG,string,) (TT_SCOPE,string,) (TT_SCOPE,string,) (TT_DISPOSITION,string,) (TT_MSET_DISPOSITION,string,) (TT_MSET_OPNUM,string,) (TT_OPNUM,string,) (TT_MSET_HANDLER_PTYPE,string,) (TT_HANDLER_PTYPE,string,) (TT_MSET_OTYPE,string,) (TT_OTYPE,string,) (TT_PARENT,string,) (TT_OUT,string,) (TT_IN,string,) (TT_INOUT,string,) (TT_SESSION,string,) (TT_FILE,string,) (TT_BOTH,string,) (TT_FILE_IN_SESSION,string,) (TT_DISCARD,string,) (TT_QUEUE,string,) (TT_START,string,) (TT_CATEGORY,string,) (TT_OBSERVE,string,) (TT_HANDLE,string,) (TT_CLASS,string,) (TT_REQUEST,string,) (TT_NOTICE,string,) (SUN_TOOLTALK_TYPE,string,) (SUN_TOOLTALK_PTYPE,string,) (SUN_TOOLTALK_OTYPE,string,) (SUN_TOOLTALK_SIGNATURE,string,) . w q EOF ce_db_build user -from_ascii /tmp/ttce2xdr.ceascii.$$ fi fi if [ $dryrun ]; then if [ $ow1 ]; then echo "OPENWINHOME=$ow1; export OPENWINHOME" fi echo "tt_type_comp -Eps $dbopt > /tmp/ttce2xdr.types.$$" if [ $ow2 ]; then echo "OPENWINHOME=$ow2; export OPENWINHOME" fi echo "tt_type_comp -Ms $dbopt /tmp/ttce2xdr.types.$$" else if [ $ow1 ]; then OPENWINHOME=$ow1 export OPENWINHOME fi rm -f /tmp/ttce2xdr.types.$$ if tt_type_comp -Eps $dbopt > /tmp/ttce2xdr.types.$$; then :; else # Conversion failed for some reason. If we're working on a # user database, we're probably doing an automatic conversion. # and there's no point in continuing to retry this every time. # Just touch the .tt/types.xdr file so auto conversion won't # keep getting run. case $database in user) nullit exit 0 ;; *) echo $cmd: could not read ToolTalk types from Classing Engine database. echo $cmd: there may not be any ToolTalk types in this database. exit 1 ;; esac fi if [ $ow2 ]; then OPENWINHOME=$ow2 export OPENWINHOME fi if tt_type_comp -Ms $dbopt /tmp/ttce2xdr.types.$$; then :; else echo $cmd: could not compile types into XDR database. exit 1 fi fi