blob: 9ea68fec1eaa06c06bb0fa6f124f3132480dcbc9 [file] [log] [blame]
#!/bin/sh
# vi: ft=awk :
#
# Script to extract functions and external variables off SUS html docs
#
# Copyright (C) 2010 Bernhard Reutner-Fischer
# Public Domain
# Usage:
# wget http://www.opengroup.org/onlinepubs/9699919799/download/susv4.tgz
# tar xzf susv4.tgz
# SUS=susv4 html2input.sh -vFULL_DECLARATIONS=1
# or
# SUS=susv4 html2input.sh -vFULL_DECLARATIONS=0 -vSTDNAME=SUSv4
#
# Bug in time.h.html of SUSv4:
# It inconsistently reads "as variables" instead of "external variables" that
# is used everywhere except in time.h.html
test "x$SUS" = "x" && SUS="susv4"
test "x$AWK" = "x" && AWK="AWK"
test "x$GREP" = "x" && GREP="GREP"
for h in \
$($GREP -l "shall be declared as functions" $SUS/basedefs/*.h.html) \
$($GREP -l "shall declare the following as variables" $SUS/basedefs/*.h.html) \
$($GREP -l "shall declare the following external variables" $SUS/basedefs/*.h.html)
do
$AWK $* '
function get_filename () {
if (NR == 1) {
x=FILENAME
sub(".*/", "", x)
split(x, f , ".")
fname=f[1]
if (STDNAME)
fname=fname "." STDNAME
fname=fname ".in"
printf "" > fname
}
}
function unhtml (l) {
sub("<tt>", "", l)
sub("</tt>", "", l)
sub("<sup>", "", l)
sub("</sup>", "", l)
sub("<a [^>]*>", "", l)
sub("</a>", "", l)
if (l ~ /<img[^>]*Option[[:space:]][[:space:]]*Start[^>]*>/) {
sub("<img[^>]*>", "[Option Start]", l)
} else if (l ~ /<img[^>]*Option[[:space:]][[:space:]]*End[^>]*>/) {
sub("<img[^>]*>", "[Option End]", l)
}
sub("<.*>", "", l)
return l
}
function get_funcname (l) {
if (FULL_DECLARATIONS)
return l
if (l !~ /;$/)
return l
cnt = split(l, foo, " ")
if (cnt >= 2 && foo[2] ~ /^\(\*/) {
cnt = split(l, foo, "(")
# good enough for signal() and sigset()
if (cnt >= 2)
l=foo[2]
} else {
sub("\\(.*", "", l)
}
gsub("[[\\]\\*]", "", l)
i = split(l, a, " ")
if (i)
l = a[i]
return l
}
function get_varname (l) {
if (FULL_DECLARATIONS)
return l
if (l !~ /;$/)
return l
gsub(",[[:space:]][[:space:]]*", ",", l)
sub(";$", "", l)
i = split(l, a, " ")
if (i)
l = a[i]
gsub("[[\\]\\*]", "", l)
gsub(",", "\n", l)
return l
}
BEGIN{data=0;l=""}
get_filename()
/shall be declared as functions/{data=1;isvar=0;next;}
/shall declare the following as variables/{data=1;isvar=1;next;}
/shall declare the following external variables/{data=1;isvar=1;next;}
/<pre>/{data++;next;}
/<\/pre>/{data=0;next;}
/.*/{
if (data == 2 && fname) {
tmp = $0
sub("^[[:space:]][[:space:]]*", " ", tmp)
l = l tmp
tmp = unhtml(l)
if (!tmp)
next
l = tmp
if (tmp !~ /;$/ && tmp !~ />$/ &&
tmp !~ /Option Start\]$/ && tmp !~ /Option End\]$/)
next
if (!isvar)
l = get_funcname(l)
else
l = get_varname(l)
if (l)
print l >> fname
l=""
}
}
' $h
done