Files
Arquivotheca.AIX-4.1.3/bos/usr/lib/nim/methods/c_popxop.sh
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

226 lines
5.1 KiB
Bash

#!/bin/ksh
# @(#)06 1.6 src/bos/usr/lib/nim/methods/c_popxop.sh, cmdnim, bos411, 9428A410j 1/20/94 14:59:46
#
# COMPONENT_NAME: CMDNIM
#
# FUNCTIONS: ./usr/lib/nim/methods/c_popxop.sh
#
# ORIGINS: 27
#
#
# (C) COPYRIGHT International Business Machines Corp. 1993
# All Rights Reserved
# Licensed Materials - Property of IBM
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
#---------------------------- c_popxop_exit ------------------------------
#
# NAME: c_popxop_exit
#
# FUNCTION:
# performs exit processing for the c_popxop method
#
# EXECUTION ENVIRONMENT:
#
# NOTES:
#
# RECOVERY OPERATION:
#
# DATA STRUCTURES:
# parameters:
# global:
#
# RETURNS: (int)
#
# OUTPUT:
#-------------------------------------------------------------------------------
c_popxop_exit ()
{
# rm all tmp files
/usr/bin/rm /tmp/$$* >/dev/null 2>/dev/null
} # end of c_popxop_exit
#---------------------------- error --------------------------------
#
# NAME: error
#
# FUNCTION:
# displays the specified message and exits with a 1
#
# EXECUTION ENVIRONMENT:
# ksh
#
# NOTES:
#
# RECOVERY OPERATION:
#
# DATA STRUCTURES:
# parameters:
# msg = error message to display
# global:
#
# RETURNS: (int)
#
# OUTPUT:
# writes an error message to stderr
#-------------------------------------------------------------------------------
error ()
{
# display the message
print "\nc_popxop: $*\n" 1>&2
cleanup
# exit
exit 1
} # end of error
#---------------------------- c_popxop.sh ------------------------------
#
# NAME: c_popxop.sh
#
# FUNCTION:
# ksh script to pop exit operations out of the specified xop file
# if a key is specified, only those lines matching the key will be
# operated on
# the word "all" is a reserved key which indicates that all operations in
# the file should be executed
# if no key is specified, then the last line in the file will be used
# the default operation will be to execute the lines which match the key;
# this may be overriden by specifying the "ignore" parameter
#
# EXECUTION ENVIRONMENT:
# executes in the ksh and is invoked from a NIM command via the pop_xop
# function in the libnim.a library
#
# NOTES:
#
# RECOVERY OPERATION:
#
# DATA STRUCTURES:
# parameters:
# file = pathname of xop file
# key = string to match on
# ignore = a "1" if matches are NOT to be executed
# global:
#
# RETURNS: (int)
# 0 = request performed
# 1 = unable to process request
#
# OUTPUT:
#-------------------------------------------------------------------------------
trap c_popxop_exit 0 1 2 6 15
umask 022
# initialize local variables
rc=0
ignore=""
# assuming that the awk script lies within the parent directory of this script
dir=${0%/*}
[[ "$dir" = "." ]] && dir=$PWD
dir=${dir%/*}
# debug mode?
if [[ "$1" = -d ]]
then
DBG=TRUE
shift
fi
# set parameters from command line
file=$1
key=$2
[[ -n "$key" ]] && [[ "$key" != all ]] && key="# $key #"
[[ "$3" = 1 ]] && ignore=$3
[[ -n "$DBG" ]] && /usr/bin/echo '-------- c_popxop ----------'
[[ -n "$DBG" ]] && \
print "dir = $dir; file = $file; key = \"$key\"; ignore = $ignore;"
# can we access the file?
if [[ ! -f "$file" ]]
then
# nothing to do
[[ -n "$DBG" ]] && print "$file doesn't exist; nothing to do!"
exit 0
elif [[ ! -s "$file" ]]
then
# nothing to do
[[ -n "$DBG" ]] && print "$file is empty; nothing to do!"
exit 0
elif [[ ! -w "$file" ]]
then
# can't write to the file
error "can't write to the input file \"$file\""
elif [[ ! -r "$dir/awk/popxop.awk" ]]
then
# can't access the awk script
error "unable to access the $dir/awk/popxop.awk script"
fi
# "all" specified?
if [[ "$key" = "all" ]]
then
[[ -n "$DBG" ]] && print "executing ALL operations"
# execute all operations in the file
/usr/bin/mv $file /tmp/$$.xops >/dev/null 2>&1 || \
error "unable to mv $file /tmp/$$.xops"
elif [[ -n "$key" ]]
then
[[ -n "$DBG" ]] && print "calling popxop.awk to match on key"
# find all the lines which match the key
/usr/bin/awk -f $dir/awk/popxop.awk last= key="$key" xops=/tmp/$$.xops \
$file >/tmp/$$ 2>/dev/null && /usr/bin/mv -f /tmp/$$ $file >/dev/null 2>&1
else
[[ -n "$DBG" ]] && print "no key - calling popxop.awk with last=1"
# use the last line in the file
/usr/bin/awk -f $dir/awk/popxop.awk last=1 key="" xops=/tmp/$$.xops $file \
>/tmp/$$ 2>/dev/null && /usr/bin/mv -f /tmp/$$ $file >/dev/null 2>&1
fi
# anything left in $file?
if [[ ! -s "$file" ]]
then
[[ -n "$DBG" ]] && \
print "after pop, $file is empty; removing it"
/usr/bin/rm $file >/dev/null 2>&1
fi
# anything exit operations to perform?
[[ -n "$DBG" ]] && [[ ! -s /tmp/$$.xops ]] && \
print "no matches were found; nothing left to do"
# skip execution?
[[ -n "$DBG" ]] && [[ -n "$ignore" ]] && \
print "ignore option set - skipping execution"
# execute the matched operations?
if [[ -z "$ignore" ]] && [[ -s /tmp/$$.xops ]]
then
/usr/bin/cat /tmp/$$.xops | {
while read xop
do
[[ -n "$DBG" ]] && print "executing: \"$xop\""
# execute the operation
[[ -n "$xop" ]] && eval $xop
done
}
fi
# all done
exit $rc