home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / news / cnews.tar / doc / fixindex.awk < prev    next >
Text File  |  1992-02-13  |  1KB  |  65 lines

  1. # record format:  page #:major entry:minor entry[:define]
  2. BEGIN {
  3.     FS = ":"
  4.     BD = "\\s+1\\fB"
  5.     ED = "\\fP\\s-1"
  6.     defn = "define"
  7. }
  8.  
  9. NR == 1 {
  10.     
  11.     if ($3 != "")
  12.         printf ".Ib \"%s\"\n", $2
  13.     major = $2
  14.     minor = $3
  15.     if ($4 == defn)
  16.         pagelist = BD $1 ED
  17.     else
  18.         pagelist = $1
  19.     pageno = $1
  20.     oldpageno = $1
  21.     oldpagelist = ""
  22. }
  23.  
  24. NR != 1 {
  25.     if ($2 == major && $3 == minor) {    # neither has changed
  26.         if ($1 != pageno) {        # new page number, append
  27.             oldpageno = $1
  28.             oldpagelist = pagelist
  29.             if ($4 == defn)
  30.                 pagelist = pagelist ", " BD $1 ED
  31.             else
  32.                 pagelist = pagelist ", " $1
  33.         } else                # old page, but check for def
  34.             if ($4 == defn) {
  35.                             if (pageno == oldpageno && oldpagelist != "")
  36.                                     oldpagelist = oldpagelist ", "
  37.                             pagelist = oldpagelist BD $1 ED
  38.                     }
  39.     } else {                # one has changed
  40.         if (minor != "")        # dump full record
  41.             printf ".I< \"%s\" \"%s\" \"%s\"\n", \
  42.                 major, minor, pagelist
  43.         else
  44.             printf ".I> \"%s\" \"%s\"\n", major, pagelist
  45.         if ($4 == defn)            # restart pagelist
  46.             pagelist = BD $1 ED
  47.         else
  48.             pagelist = $1
  49.         oldpagelist = ""
  50.         oldpageno = $1
  51.         if ($2 != major && $3 != "") # major has changed, minor not null
  52.             printf(".Ib \"%s\"\n", $2)
  53.     }
  54.     major = $2
  55.     minor = $3
  56.     pageno = $1
  57. }
  58.  
  59. END {
  60.     if (minor != "")            # dump full record
  61.         printf ".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist
  62.     else
  63.         printf ".I> \"%s\" \"%s\"\n", major, pagelist 
  64. }
  65.