From 3a42b0815e69f00bb74aa002e77f321c634d0a66 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Sun, 9 May 2021 23:39:10 +0200 Subject: [PATCH] scripts/bash_aliases: Add man_lsvar(), similar to man_lsfunc() but lists variables Signed-off-by: Alejandro Colomar Signed-off-by: Michael Kerrisk --- scripts/bash_aliases | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scripts/bash_aliases b/scripts/bash_aliases index c50108a16..813c00960 100644 --- a/scripts/bash_aliases +++ b/scripts/bash_aliases @@ -131,6 +131,33 @@ function man_lsfunc() |uniq; } +# man_lsvar() prints the name of all C variables declared in the SYNOPSIS +# of all manual pages in a directory (or in a single manual page file). +# Each name is printed in a separate line +# Usage example: .../man-pages$ man_lsvar man3; + +function man_lsvar() +{ + if ! [ -v 1 ]; then + >&2 echo "Usage: ${FUNCNAME[0]} "; + return ${EX_USAGE}; + fi + + for arg in "$@"; do + man_section "${arg}" 'SYNOPSIS'; + done \ + |sed_rm_ccomments \ + |pcregrep -Mv '(?s)^ [\w ]+ \**\w+\([\w\s(,)[\]*]+?(...)?\s*\); *$' \ + |pcregrep -Mn \ + -e '(?s)^ +extern [\w ]+ \**\(\*+[\w ]+\)\([\w\s(,)[\]*]+?\s*\); *$' \ + -e '^ +extern [\w ]+ \**[\w ]+; *$' \ + |grep '^[0-9]' \ + |grep -v 'typedef' \ + |sed -E 's/^[0-9]+: +extern [^(]+ \**\(\*+(\w* )?(\w+)\)\(.*/\2/' \ + |sed 's/^[0-9]\+: \+extern .* \**\(\w\+\); */\1/' \ + |uniq; +} + # pdfman() renders a manual page in PDF # Usage example: .../man-pages$ pdfman man2/membarrier.2;