|
Packit |
fcad23 |
#!/bin/sh
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# smistrip --
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Extract MIB modules from text files, like RFCs or I-Ds.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# This is variant of smistrip from libsmi-0.2, modified to be somewhat
|
|
Packit |
fcad23 |
# more aggressive in suppressing blank lines, and support the -x option.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Copyright (c) 1999 Frank Strauss, Technical University of Braunschweig.
|
|
Packit |
fcad23 |
# Modified by Niels Baggesen
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# See the file "COPYING" for information on usage and redistribution
|
|
Packit |
fcad23 |
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# $Id$
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# NOTE, that this script relies on awk (tested with GNU awk) and getopts
|
|
Packit |
fcad23 |
# (shell builtin like in bash or standalone).
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
AWK=awk
|
|
Packit |
fcad23 |
[ `uname` != SunOS ] || AWK=/usr/bin/nawk
|
|
Packit |
fcad23 |
GETOPTS=getopts
|
|
Packit |
fcad23 |
VERSION=0.3-cvs
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
do_version () {
|
|
Packit |
fcad23 |
echo "smistrip $VERSION"
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
do_usage () {
|
|
Packit |
fcad23 |
echo "Usage: smistrip [-Vhn] [-d dir] [-s suffix] [-m modules] file ..."
|
|
Packit |
fcad23 |
echo "-V show version and license information"
|
|
Packit |
fcad23 |
echo "-v verbose"
|
|
Packit |
fcad23 |
echo "-h show usage information"
|
|
Packit |
fcad23 |
echo "-n do not write module files"
|
|
Packit |
fcad23 |
echo "-d dir write module to directory dir"
|
|
Packit |
fcad23 |
echo "-x suffix append suffix to the module file name"
|
|
Packit |
fcad23 |
echo "-m modules strip only the specified modules. For a list of modules"
|
|
Packit |
fcad23 |
echo " use : as a separator"
|
|
Packit |
fcad23 |
echo "file ... input files to parse (RFCs, I-Ds, ...)"
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
do_strip () {
|
|
Packit |
fcad23 |
expand $1 | sed 's/[ \r]*$//' | $AWK -v test="$test" -v dir="$dir" -v single="$single" -v suffix="$suffix" -v verbose="$verbose" '
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
BEGIN {
|
|
Packit |
fcad23 |
if (length(single) != 0) {
|
|
Packit |
fcad23 |
single = ":"single":"
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else {
|
|
Packit |
fcad23 |
single = ""
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
END {
|
|
Packit |
fcad23 |
if (single != "" && single != ":") {
|
|
Packit |
fcad23 |
gsub(":", " ", single)
|
|
Packit |
fcad23 |
print "WARNING: Module(s) not found:" single
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# start of module
|
|
Packit |
fcad23 |
/^[ \t]*[A-Za-z0-9-]* *DEFINITIONS( +IMPLICIT +TAGS)? *::= *BEGIN/ {
|
|
Packit |
fcad23 |
module = $1
|
|
Packit |
fcad23 |
collect = 1
|
|
Packit |
fcad23 |
macro = 0
|
|
Packit |
fcad23 |
n = 0
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# page footer - start skipping
|
|
Packit |
fcad23 |
/\[Page [iv0-9]*\] */ {
|
|
Packit |
fcad23 |
collect = 0
|
|
Packit |
fcad23 |
next
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/^[ \t]*(::=|DESCRIPTION|SYNTAX|MAX-ACCESS|MIN-ACCESS|ACCESS|STATUS|REFERENCE|INDEX|AUGMENTS|DEFVAL|UNITS|DISPLAY|")/ {
|
|
Packit |
fcad23 |
if (collect)
|
|
Packit |
fcad23 |
if (line[n-1] == "") n--
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# a blank line - suppress multiple
|
|
Packit |
fcad23 |
/^[ \t\r]*$/ {
|
|
Packit |
fcad23 |
if (collect)
|
|
Packit |
fcad23 |
if (line[n-1] != "" && line[n-1] !~ /,[ \t\r]*$/) line[n++] = ""
|
|
Packit |
fcad23 |
next
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# collect non-blank line when inside mib module
|
|
Packit |
fcad23 |
/[^ \f\t]/ {
|
|
Packit |
fcad23 |
if (length(module) > 0) {
|
|
Packit |
fcad23 |
if (!collect)
|
|
Packit |
fcad23 |
collect = 1 # page header, stop skipping
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
line[n++] = $0
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# remember when we enter a macro definition
|
|
Packit |
fcad23 |
/ *MACRO *::=/ {
|
|
Packit |
fcad23 |
macro = 1
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# end of module
|
|
Packit |
fcad23 |
/^[ \t]*END[ \t\r]*$/ {
|
|
Packit |
fcad23 |
if (macro)
|
|
Packit |
fcad23 |
macro = 0
|
|
Packit |
fcad23 |
else if (single == "" || match(single, ":"module":")) {
|
|
Packit |
fcad23 |
sub(":"module, "", single)
|
|
Packit |
fcad23 |
strip = 99
|
|
Packit |
fcad23 |
for (i = 0 ; i < n ; i++) {
|
|
Packit |
fcad23 |
# find the minimum column that contains non-blank characters
|
|
Packit |
fcad23 |
# in order to cut a blank prefix off.
|
|
Packit |
fcad23 |
p = match(line[i], "[^ ]")
|
|
Packit |
fcad23 |
if (p < strip && length(line[i]) > p) strip = p
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (test != "1") {
|
|
Packit |
fcad23 |
if (dir)
|
|
Packit |
fcad23 |
f = dir "/" module suffix
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
f = module suffix
|
|
Packit |
fcad23 |
for (i = 0 ; i < n ; i++)
|
|
Packit |
fcad23 |
print substr(line[i], strip) >f
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (verbose) {
|
|
Packit |
fcad23 |
print module ": " n " lines."
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
module = ""
|
|
Packit |
fcad23 |
collect = 0
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
print "NOTE: " module ": ignored."
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
'
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
while $GETOPTS Vvhnm:d:x: c ; do
|
|
Packit |
fcad23 |
case $c in
|
|
Packit |
fcad23 |
v) verbose=1
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
n) test=1
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
m) single=$OPTARG
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
d) dir=$OPTARG
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
x) suffix=$OPTARG
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
h) do_usage
|
|
Packit |
fcad23 |
exit 0
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
V) do_version
|
|
Packit |
fcad23 |
exit 0
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
*) do_usage
|
|
Packit |
fcad23 |
exit 1
|
|
Packit |
fcad23 |
;;
|
|
Packit |
fcad23 |
esac
|
|
Packit |
fcad23 |
done
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
shift `expr $OPTIND - 1`
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if [ $# -eq 0 ] ; then
|
|
Packit |
fcad23 |
do_strip -
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
for f in $@ ; do
|
|
Packit |
fcad23 |
do_strip $f
|
|
Packit |
fcad23 |
done
|
|
Packit |
fcad23 |
fi
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
exit 0
|