This commit was manufactured by cvs2svn to create tag 'FreeBSD-release/1.0'.
[unix-history] / gnu / usr.bin / man / makewhatis / makewhatis.sh
index e6c238c..1d86d19 100644 (file)
@@ -21,7 +21,6 @@ then
     echo "usage: makewhatis directory [...]"
     exit 1
 fi
     echo "usage: makewhatis directory [...]"
     exit 1
 fi
-
 for dir in $*
 do
     cd $dir
 for dir in $*
 do
     cd $dir
@@ -29,50 +28,85 @@ do
     do
         if [ -d $subdir ]
         then
     do
         if [ -d $subdir ]
         then
-            for f in `find . -name '*' -print`
+            for f in `find $subdir -type f -print`
             do
                 sed -n '/^\.TH.*$/p
             do
                 sed -n '/^\.TH.*$/p
-                        /^\.SH[         ]*NAME/,/^\.SH/p' $f |\
+                       /^\.Dt.*$/p
+                        /^\.S[hH][         ]*NAME/,/^\.S[hH]/p' $f |\
                 sed -e 's/\\[   ]*\-/-/
                 sed -e 's/\\[   ]*\-/-/
-                        s/^.PP.*$//
+                        s/^.P[Pp].*$//
                         s/\\(em//
                         s/\\fI//
                         s/\\fR//' |\
                         s/\\(em//
                         s/\\fI//
                         s/\\fR//' |\
-                awk 'BEGIN {insh = 0} {
-                     if ($1 == ".TH")
+                awk 'BEGIN {insh = 0; inSh = 0; Nd = 0} {
+                     if ($1 == ".TH" || $1 == ".Dt")
                        sect = $3
                        sect = $3
-                     else if ($1 == ".SH" && insh == 1) {
-                       if (i > 0 && name != NULL) {
-                         namesect = sprintf("%s (%s)", name, sect)
-                         printf("%-20.20s", namesect)
-                         printf(" - ")
-                         for (j = 0; j < i-1; j++)
-                           printf("%s ", desc[j])
-                         printf("%s\n", desc[i-1])
+                     else if (($1 == ".br" && insh == 1)\
+                      ||  ($1 == ".SH" && insh == 1)\
+                      || ($1 == ".Sh" && inSh == 1)) {
+                       if (i > 0 && nc > 0) {
+                         for (k= 1; k <= nc; k++) {
+                                namesect = sprintf("%s (%s)", name[k], sect)
+                                printf("%s", namesect)
+                                printf(" - ")
+                                for (j = 0; j < i-1; j++)
+                                  printf("%s ", desc[j])
+                                printf("%s\n", desc[i-1])
+                        }
                        }
                        }
+                      count = 0
+                      i = 0
+                      nc = 0
                      } else if ($1 == ".SH" && insh == 0) {
                        insh = 1
                        count = 0
                        i = 0
                      } else if ($1 == ".SH" && insh == 0) {
                        insh = 1
                        count = 0
                        i = 0
+                       nc = 0
+                     } else if ($1 == ".Sh" && inSh == 0) {
+                       inSh = 1
+                       i = 0
+                       nc = 0
                      } else if (insh == 1) {
                        count++
                        if (count == 1 && NF > 2) {
                      } else if (insh == 1) {
                        count++
                        if (count == 1 && NF > 2) {
-                         start = 2
-                         if ($2 == "-") start = 3
-                         if (NF > start + 1)
+                        start = 2
+                         for (k = 1; k <= NF; k++)
+                               if ($k == "-") {
+                                       start = k + 1
+                                       break
+                               } else {
+                                       sub(",","",$k)
+                                       if ($k != "")
+                                               name[++nc] = $k
+                               }
+                         if (NF >= start)
                            for (j = start; j <= NF; j++)
                              desc[i++] = $j
                            for (j = start; j <= NF; j++)
                              desc[i++] = $j
-                           name = $1
                        } else {
                          for (j = 1; j <= NF; j++)
                            desc[i++] = $j
                        }
                        } else {
                          for (j = 1; j <= NF; j++)
                            desc[i++] = $j
                        }
-                     }
+                     } else if ($1 == ".Nm" && inSh == 1 && Nd == 0) {
+                         for (k = 2; k <= NF; k++) {
+                               sub(",","",$k)
+                               if ($k != "")
+                                       name[++nc] = $k
+                       }
+                     } else if ($1 == ".Nd" && inSh == 1) {
+                       Nd = 1
+                       for (j = 2; j <= NF; j++)
+                          desc[i++] = $j
+                     } else if (Nd == 1) {
+                        start = 1
+                        if ($1 ~ /\..*/)
+                               start = 2
+                       for (j = start; j <= NF; j++)
+                          desc[i++] = $j
+                    }
                 }'
             done
                 }'
             done
-            cd ..
         fi
         fi
-    done | sort | colrm 80 > $dir/whatis.db.tmp
+    done | sort | colrm 80 | uniq > $dir/whatis.db.tmp
     mv $dir/whatis.db.tmp $dir/whatis
 done
 
     mv $dir/whatis.db.tmp $dir/whatis
 done