From: Michael Orlitzky Date: Sun, 18 Apr 2010 01:27:02 +0000 (-0400) Subject: Added the parse_macros script. It was used to retrieve the list of macros in the... X-Git-Tag: v0.1~5 X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=c8197c4400ace50ae3f488725462fceb9f729a80;p=nagios-mode.git Added the parse_macros script. It was used to retrieve the list of macros in the previous commit. --- diff --git a/utils/parse_macros b/utils/parse_macros new file mode 100755 index 0000000..466bcea --- /dev/null +++ b/utils/parse_macros @@ -0,0 +1,74 @@ +#!/bin/bash +# +# Parse the macro names out of Nagios' include/macros.h. +# +# Operates on whatever file you give it. That should probably be +# include/macros.h. Just sayin'. +# + +EXIT_USAGE=1 +EXIT_INPUT_FILE_DOESNT_EXIST=2 +EXIT_OUTPUT_FILE_EXISTS=3 +EXIT_TEMP_FILE_EXISTS=4 + +if [ $# -lt 2 ]; then + echo "Usage: $0 " + exit $EXIT_USAGE +fi + + +INFILE="$1" +OUTFILE="$2" +TEMPFILE="${OUTFILE}.tmp" + +if [ ! -f "$INFILE" ]; then + echo "Error: input file $INFILE doesn't exist." + exit $EXIT_INPUT_FILE_DOESNT_EXIST +fi + +if [ -f "$OUTFILE" ]; then + echo "Error: output file $OUTFILE already exists." + exit $EXIT_OUTPUT_FILE_EXISTS +fi + +if [ -f "$TEMPFILE" ]; then + echo "Error: temporary file $TEMPFILE already exists." + exit $EXIT_TEMP_FILE_EXISTS +fi + +# Common options. Color screws up the output. +GREP="grep --extended-regexp --color=never" + +# Grep grabs all of the "#define MACRO..." lines, except for +# MACRO_X_COUNT and MACRO_ENV_VAR_PREFIX which aren't real macros. +# Sed just removes the "MACRO_" prefixes. +$GREP --only-matching '[[:space:]]MACRO_[[:alnum:]_]+' "$INFILE" \ + | $GREP -v 'MACRO_X_COUNT' \ + | $GREP -v 'MACRO_ENV_VAR_PREFIX' \ + | sed 's/ MACRO_//g' >> "$OUTFILE" + +# We need to include ARG1, ARG2... ARG, +# where the maximum is defined in macros.h. +MAXARG=`$GREP 'MAX_COMMAND_ARGUMENTS' "$INFILE" \ + | $GREP --only-matching '[[:digit:]]+'` + +for argnum in `seq 1 $MAXARG`; do + echo "ARG${argnum}" >> "$OUTFILE" +done + +# And, the USER1, USER2... USER macros. +# Same as above. +MAXUSER=`$GREP 'MAX_USER_MACROS' "$INFILE" \ + | $GREP --only-matching '[[:digit:]]+'` + +for argnum in `seq 1 $MAXUSER`; do + echo "USER${argnum}" >> "$OUTFILE" +done + +# Now, we sort the thing. +sort "$OUTFILE" > "$TEMPFILE" + +# Add quotes and '\\$' before and after each macro. This just +# makes it easy to cut-and-pase into nagios-mode.el. +sed -e 's/^/\"\\\\\$/g' -e 's/$/\\\\\$\"/g' "$TEMPFILE" > "$OUTFILE" +rm "$TEMPFILE"