home *** CD-ROM | disk | FTP | other *** search
- # record format: page #:major entry:minor entry[:define]
- BEGIN {
- FS = ":"
- BD = "\\s+1\\fB"
- ED = "\\fP\\s-1"
- defn = "define"
- }
-
- NR == 1 {
-
- if ($3 != "")
- printf ".Ib \"%s\"\n", $2
- major = $2
- minor = $3
- if ($4 == defn)
- pagelist = BD $1 ED
- else
- pagelist = $1
- pageno = $1
- oldpageno = $1
- oldpagelist = ""
- }
-
- NR != 1 {
- if ($2 == major && $3 == minor) { # neither has changed
- if ($1 != pageno) { # new page number, append
- oldpageno = $1
- oldpagelist = pagelist
- if ($4 == defn)
- pagelist = pagelist ", " BD $1 ED
- else
- pagelist = pagelist ", " $1
- } else # old page, but check for def
- if ($4 == defn) {
- if (pageno == oldpageno && oldpagelist != "")
- oldpagelist = oldpagelist ", "
- pagelist = oldpagelist BD $1 ED
- }
- } else { # one has changed
- if (minor != "") # dump full record
- printf ".I< \"%s\" \"%s\" \"%s\"\n", \
- major, minor, pagelist
- else
- printf ".I> \"%s\" \"%s\"\n", major, pagelist
- if ($4 == defn) # restart pagelist
- pagelist = BD $1 ED
- else
- pagelist = $1
- oldpagelist = ""
- oldpageno = $1
- if ($2 != major && $3 != "") # major has changed, minor not null
- printf(".Ib \"%s\"\n", $2)
- }
- major = $2
- minor = $3
- pageno = $1
- }
-
- END {
- if (minor != "") # dump full record
- printf ".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist
- else
- printf ".I> \"%s\" \"%s\"\n", major, pagelist
- }
-