123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #!/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
|