| 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.htmltest "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=""	}}' $hdone
 |