gno-docs/describe/mkindex

178 lines
5.6 KiB
Perl
Executable File

#! /usr/bin/perl
# This script makes the index listing used sort describe entries by
# category. It gets most of its information from where utilities
# reside in the GNO ftp hierarchy.
#
# Devin Reade, January 1998
#
# $Id: mkindex,v 1.4 1999/07/03 16:55:42 gdr-ftp Exp $
#
$dirroot = "/ftp/pub/apple2/gs.specific";
$dirlist = "gno orca";
$describe = '/usr/local/bin/describe';
# This is a list of describe entries which we want to force into a
# given category. This should only be used when a utility doesn't have
# an entry of its own in the .index.src files as a result of being
# archived with another utility. For example, we fudge "descc" and
# "descu" because they are archived in with "describe".
$fudgelist{"cclean"} = "gno/programming"; # with occ
$fudgelist{"ccprep"} = "gno/programming"; # with occ
$fudgelist{"cjpeg"} = "gno/graphics"; # part of jpeg tools
$fudgelist{"djpeg"} = "gno/graphics"; # part of jpeg tools
$fudgelist{"jpegtran"} = "gno/graphics"; # part of jpeg tools
$fudgelist{"rdjpgcom"} = "gno/graphics"; # part of jpeg tools
$fudgelist{"wrjpgcom"} = "gno/graphics"; # part of jpeg tools
$fudgelist{"descc"} = "gno/doc.utils"; # with describe
$fudgelist{"descu"} = "gno/doc.utils"; # with describe
$fudgelist{"fortune"} = "gno/games"; # resolve fortuna-[abc]
$fudgelist{"newuserv"} = "gno/sysadmin"; # with newuser
# $fudgelist{""} = "";
# Actually, another possibility is that the file is not up for ftp in the
# pre-packaged directories, but is rather part of the GNO base distribution.
$fudgelist{"aroff"} = "gno/doc.utils";
$fudgelist{"asml"} = "gno/programming";
$fudgelist{"assemble"} = "gno/programming";
$fudgelist{"aw30"} = "gno/doc.utils";
$fudgelist{"binprint"} = "gno/editors";
$fudgelist{"blist"} = "gno/editors";
$fudgelist{"cal"} = "gno/games";
$fudgelist{"cat"} = "gno/editors";
$fudgelist{"center"} = "gno/text.utils";
$fudgelist{"chtyp"} = "gno/file.manip";
$fudgelist{"cksum"} = "gno/archive";
$fudgelist{"cmp"} = "gno/text.utils";
$fudgelist{"cmpl"} = "gno/programming";
$fudgelist{"colcrt"} = "gno/doc.utils";
$fudgelist{"compile"} = "gno/programming";
$fudgelist{"ctags"} = "gno/programming";
$fudgelist{"cu"} = "gno/network";
$fudgelist{"df"} = "gno/sys";
$fudgelist{"dial"} = "gno/network";
$fudgelist{"duplex"} = "gno/network";
$fudgelist{"eps"} = "gno/sys";
$fudgelist{"expr"} = "gno/scripting";
$fudgelist{"false"} = "gno/scripting";
$fudgelist{"fmt"} = "gno/editors";
$fudgelist{"ftp"} = "gno/network";
$fudgelist{"gsh"} = "gno/shells";
$fudgelist{"head"} = "gno/editors";
$fudgelist{"help"} = "gno/doc.utils";
$fudgelist{"inetd"} = "gno/network";
$fudgelist{"init"} = "gno/daemons";
$fudgelist{"kill"} = "gno/sys";
$fudgelist{"link"} = "gno/programming";
$fudgelist{"list"} = "gno/doc.utils";
$fudgelist{"logger"} = "gno/scripting";
$fudgelist{"login"} = "gno/daemons";
$fudgelist{"lseg"} = "gno/programming";
$fudgelist{"mkfs"} = "gno/sysadmin";
$fudgelist{"mkso"} = "gno/sysadmin";
$fudgelist{"phone"} = "gno/mail";
$fudgelist{"pwd"} = "gno/sys";
$fudgelist{"rcp"} = "gno/network";
$fudgelist{"remote"} = "gno/network";
$fudgelist{"removerez"} = "gno/file.convert";
$fudgelist{"rlogin"} = "gno/network";
$fudgelist{"rsh"} = "gno/network";
$fudgelist{"rtf2text"} = "gno/file.convert";
$fudgelist{"sed"} = "gno/editors";
$fudgelist{"sendmail"} = "gno/mail";
$fudgelist{"sleep"} = "gno/scripting";
$fudgelist{"su"} = "gno/sysadmin";
$fudgelist{"syslogd"} = "gno/daemons";
$fudgelist{"sz"} = "gno/comm";
# $fudgelist{"tr"} = "gno/text.utils";
# $fudgelist{"trek"} = "gno/games";
$fudgelist{"true"} = "gno/scripting";
$fudgelist{"uniq"} = "gno/text.utils";
$fudgelist{"uptimed"} = "gno/daemons";
$fudgelist{"wc"} = "gno/text.utils";
$fudgelist{"who"} = "gno/sys";
$fudgelist{"whois"} = "gno/sys";
$fudgelist{"yes"} = "gno/scripting";
#
# Get the list of .index.src files. We will look in here for references
# to the describe database.
#
open(fp, "(cd $dirroot; find $dirlist -name .index.src -print)|") ||
die("couldn't get file list");
@indexfiles = <fp>;
close(fp);
# extract all the program names from the db source file.
while(<>) {
chop;
if (/^Name:\s+(.*)/) {
$name = $1;
$name =~ s/\s+$//;
if ($name =~ /\s+/) {
printf(stderr "%s:%d: Multi-word program name \"%s\". Skipped.\n",
$ARGV, $., $name);
} else {
$name =~ tr/A-Z/a-z/;
$namelist{$name} = ':';
}
}
}
foreach $f (@indexfiles) {
chop($f);
if (open(fp, "$dirroot/$f")) {
$f2 = $f;
$f2 =~ s,/.index.src$,,;
while ($_ = <fp>) {
if (/%%describe%%([^%]+)%%/) {
$ref = $1;
$ref =~ tr/A-Z/a-z/;
if (defined($namelist{$ref})) {
($namelist{$ref} .= "$f2:")
unless ($namelist{$ref} =~ /:$f2:/);
} else {
printf(stderr
"%s/%s:%d: Warning: Reference to program (\"%s\") ".
"not in database. Entry skipped.\n",
$dirroot, $f, $., $ref);
}
}
}
} else {
printf("couldn't open %s/%s: file skipped", $dirroot, $f);
}
}
# print out the results.
@keylist = keys(%namelist);
foreach $k (@keylist) {
$s = $namelist{$k};
if ($s eq ':') {
if (defined($fudgelist{$k})) {
$s = ':' . $fudgelist{$k} . ':';
} else {
$s = ':unsorted:';
$result = system("$describe $k > /dev/null") / 256;
if ($result == 0) {
printf(stderr
"WARNING: '$k' is showing up as 'unsorted', but has ".
"a describe(1) entry.\n\tThis probably means that the ".
".index.src file is not using an\n\texisting".
"describe entry.\n", $k);
}
}
} elsif (defined($fudgelist{$k})) {
printf(stderr
"WARNING: %s should no longer be in the fudge list\n", $k);
}
printf("%s\t%s\n", $k, $s);
}