#!/usr/bin/perl

# <honey@missprint.org>

# Initialise filenames
$LOCALDIR="/usr/local";

require("cgi.pl");
require("sinister.pl");

# The URL of the parent page
$fromurl=$ENV{'HTTP_REFERER'}; 

# Get parameters
&ReadParse;

# Find which list we're after
$WHICH = $in{'where'};
# Ignore $WHICH
$LIST1=$LOCALDIR . "/majordomo/lists/sinister";
$LIST2=$LOCALDIR . "/majordomo/lists/sinister-digest";
$LIST3=$LOCALDIR . "/majordomo/lists/sinister.nomail";
$LIST4=$LOCALDIR . "/majordomo/lists/sinister-digest.nomail";

# Output HTML header
&HTML_Header;

&Sinister_Header(STDOUT,"Domain Membership of Sinister lists","hmm.gif",fromurl);

# Open subscription lists

open(MEMBERS, "sort $LIST1 $LIST2 $LIST3 $LIST4 |") || die "Sorry - couldn't open list pipe";

print "<TABLE BORDER=0 CELLSPACING=5>\n";

# Go through each main or digest list member
EMAIL: while (<MEMBERS>) {

  $t++;

  chop;
  $email = $_;

# Can't uniq so do it here (if on both lists)
  if ( $email eq $lastemail ) { next EMAIL; }

# Look for matches for this email in each list
  &whichdomain($domains,$email);

  $lastemail = $email;
}

close(MEMBERS);

# Load in domain names for symbols
&namedomains;

# Sort into number order
#@domains = sort bynum @domains;

foreach $dom (sort keys(%domains)) {
  printf "<TR> <TD ALIGN=RIGHT><B>%4d</B></TD> <TD>%s</TD>\n", $domains{$dom}, $domainabbr{$dom};
}

print "\n</TABLE>\n";
print "<FONT SIZE=+1><FONT COLOR=\"#993399\"><B>\n";
print "<BR>Total number of members: " . $t . "</B>\n";
print "</FONT></FONT></B>\n";
 
&Sinister_Footer(STDOUT,fromurl);




sub whichdomain {

# Increment associative array element for domain for $email

  ($domains,$email) = @_;
  $email =~ tr/A-Z/a-z/;

  @elements = split(/\./, $email);
  local($dom) = $elements[$#elements];
  ++$domains{$dom};

}


# Pg 180 Perl Guide: to sort domains list by number

sub bynum {
  $num{$a} <=> $num{$b}
}


sub namedomains {

# Set up arrays for domain abbreviations and for numbers per domain

  %domainabbr = (
    'ad', 'Andorra',
    'ae', 'United Arab Emirates',
    'af', 'Afghanistan',
    'ag', 'Antigua and Barbuda',
    'ai', 'Anguilla',
    'al', 'Albania',
    'am', 'Armenia',
    'an', 'Netherlands Antilles',
    'ao', 'Angola',
    'aq', 'Antarctica',
    'ar', 'Argentina',
    'arpa', 'Adv. Research Proj.',
    'as', 'American Samoa',
    'at', 'Austria',
    'au', 'Australia',
    'aw', 'Aruba',
    'az', 'Azerbaijan',
    'ba', 'Bosnia Hercegovina',
    'bb', 'Barbados',
    'bd', 'Bangladesh',
    'be', 'Belgium',
    'bf', 'Burkina Faso',
    'bg', 'Bulgaria',
    'bh', 'Bahrain',
    'bi', 'Burundi',
    'bj', 'Benin',
    'bm', 'Bermuda',
    'bn', 'Brunei Darussalam',
    'bo', 'Bolivia',
    'br', 'Brazil',
    'bs', 'Bahamas',
    'bt', 'Bhutan',
    'bv', 'Bouvet Island',
    'bw', 'Botswana',
    'by', 'Belarus',
    'by', 'Byelorussian SSR',
    'bz', 'Belize',
    'ca', 'Canada',
    'cc', 'Cocos (Keeling) Islands',
    'cf', 'Central African Rep.',
    'cg', 'Congo',
    'ch', 'Switzerland',
    'ci', 'Cote d\'Ivoire',
    'ck', 'Cook Islands',
    'cl', 'Chile',
    'cm', 'Cameroon',
    'cn', 'China',
    'co', 'Colombia',
    'com', 'Commercial (.com)',
    'cr', 'Costa Rica',
    'cs', 'Czechoslovakia',
    'cu', 'Cuba',
    'cv', 'Cape Verde',
    'cx', 'Christmas Island',
    'cy', 'Cyprus',
    'cz', 'Czech Republic',
    'de', 'Germany',
    'dj', 'Djibouti',
    'dk', 'Denmark',
    'dm', 'Dominica',
    'do', 'Dominican Republic',
    'dz', 'Algeria',
    'ec', 'Ecuador',
    'edu', 'US Educational',
    'ee', 'Estonia',
    'eg', 'Egypt',
    'eh', 'Western Sahara',
    'es', 'Spain',
    'et', 'Ethiopia',
    'fi', 'Finland',
    'fj', 'Fiji',
    'fk', 'Falkland Islands',
    'fm', 'Micronesia',
    'fo', 'Faroe Islands',
    'fr', 'France',
    'ga', 'Gabon',
    'gb', 'United Kingdom',
    'gd', 'Grenada',
    'ge', 'Georgia',
    'gf', 'French Guiana',
    'gh', 'Ghana',
    'gi', 'Gibraltar',
    'gl', 'Greenland',
    'gm', 'Gambia',
    'gn', 'Guinea',
    'gov', 'US Government',
    'gp', 'Guadeloupe',
    'gq', 'Equatorial Guinea',
    'gr', 'Greece',
    'gt', 'Guatemala',
    'gu', 'Guam',
    'gw', 'Guinea-Bissau',
    'gy', 'Guyana',
    'hk', 'Hong Kong',
    'hm', 'Heard and McDonald Is.',
    'hn', 'Honduras',
    'hr', 'Croatia (Hrvatska)',
    'ht', 'Haiti',
    'hu', 'Hungary',
    'id', 'Indonesia',
    'ie', 'Ireland',
    'il', 'Israel',
    'in', 'India',
    'int', 'International',
    'io', 'Brit.Indian Ocean Terr.',
    'iq', 'Iraq',
    'ir', 'Iran, Islamic Rep. of',
    'is', 'Iceland',
    'it', 'Italy',
    'jm', 'Jamaica',
    'jo', 'Jordan',
    'jp', 'Japan',
    'ke', 'Kenya',
    'kg', 'Kyrgyzstan',
    'kh', 'Cambodia',
    'ki', 'Kiribati',
    'km', 'Comoros',
    'kn', 'Saint Kitts and Nevis',
    'kp', 'Korea, Democratic PR',
    'kr', 'Korea, Republic of',
    'kw', 'Kuwait',
    'ky', 'Cayman Islands',
    'kz', 'Kazakhstan',
    'la', 'Lao People\'s Democratic Rep.',
    'lb', 'Lebanon',
    'lc', 'Saint Lucia',
    'li', 'Liechtenstein',
    'lk', 'Sri Lanka',
    'lr', 'Liberia',
    'ls', 'Lesotho',
    'lt', 'Lithuania',
    'lu', 'Luxembourg',
    'lv', 'Latvia',
    'ly', 'Libyan Arab Jamahiriya',
    'ma', 'Morocco',
    'mc', 'Monaco',
    'md', 'Moldova, Republic of',
    'mg', 'Madagascar',
    'mh', 'Marshall Islands',
    'mil', 'US Military',
    'mk', 'Macedonia',
    'ml', 'Mali',
    'mm', 'Myanmar',
    'mn', 'Mongolia',
    'mo', 'Macau',
    'mp', 'Northern Mariana Is.',
    'mq', 'Martinique',
    'mr', 'Mauritania',
    'ms', 'Montserrat',
    'mt', 'Malta',
    'mu', 'Mauritius',
    'mv', 'Maldives',
    'mw', 'Malawi',
    'mx', 'Mexico',
    'my', 'Malaysia',
    'mz', 'Mozambique',
    'na', 'Namibia',
    'nato', 'North Atlantic Treaty Org',
    'nc', 'New Caledonia',
    'ne', 'Niger',
    'net', 'Network (.net)',
    'nf', 'Norfolk Island',
    'ng', 'Nigeria',
    'ni', 'Nicaragua',
    'nl', 'Netherlands',
    'no', 'Norway',
    'np', 'Nepal',
    'nr', 'Nauru',
    'nt', 'Neutral Zone',
    'nu', 'Niue',
    'nz', 'New Zealand',
    'om', 'Oman',
    'org', 'Organization (.org)',
    'pa', 'Panama',
    'pe', 'Peru',
    'pf', 'French Polynesia',
    'pg', 'Papua New Guinea',
    'ph', 'Philippines',
    'pk', 'Pakistan',
    'pl', 'Poland',
    'pm', 'St. Pierre and Miquelon',
    'pn', 'Pitcairn',
    'pr', 'Puerto Rico',
    'pt', 'Portugal',
    'pw', 'Palau',
    'py', 'Paraguay',
    'qa', 'Qatar',
    're', 'Reunion',
    'ro', 'Romania',
    'ru', 'Russian Federation',
    'rw', 'Rwanda',
    'sa', 'Saudi Arabia',
    'sb', 'Solomon Islands',
    'sc', 'Seychelles',
    'sd', 'Sudan',
    'se', 'Sweden',
    'sg', 'Singapore',
    'sh', 'St. Helena',
    'si', 'Slovenia',
    'sj', 'Svalbard and Jan Mayen Is',
    'sk', 'Slovakia',
    'sl', 'Sierra Leone',
    'sm', 'San Marino',
    'sn', 'Senegal',
    'so', 'Somalia',
    'sr', 'Suriname',
    'st', 'Sao Tome and Principe',
    'su', 'Soviet Union',
    'sv', 'El Salvador',
    'sy', 'Syrian Arab Republic',
    'sz', 'Swaziland',
    'tc', 'Turks and Caicos Is.',
    'td', 'Chad',
    'tf', 'French Southern Terr.',
    'tg', 'Togo',
    'th', 'Thailand',
    'tj', 'Tajikistan',
    'tk', 'Tokelau',
    'tm', 'Turkmenistan',
    'tn', 'Tunisia',
    'to', 'Tonga',
    'tp', 'East Timor',
    'tr', 'Turkey',
    'tt', 'Trinidad and Tobago',
    'tv', 'Tuvalu',
    'tw', 'Taiwan, Prov. of China',
    'tz', 'Tanzania, United Rep.',
    'ua', 'Ukrainian SSR',
    'ug', 'Uganda',
    'uk', 'United Kingdom',
    'um', 'US Minor Outlying Is.',
    'us', 'United States of America',
    'uy', 'Uruguay',
    'uz', 'Uzbekistan',
    'va', 'Vatican City State',
    'vc', 'Saint Vincent & Grenadines',
    've', 'Venezuela',
    'vg', 'Virgin Islands (British)',
    'vi', 'Virgin Islands (U.S.)',
    'vn', 'Viet Nam',
    'vu', 'Vanuatu',
    'wf', 'Wallis and Futuna Islands',
    'ws', 'Samoa',
    'ye', 'Yemen, Republic of',
    'yu', 'Yugoslavia',
    'za', 'South Africa',
    'zm', 'Zambia',
    'zr', 'Zaire',
    'zw', 'Zimbabwe',
  )

}
