#!/usr/bin/perl
#
# f.unblock - unblock a staff tape, producing the standard format
#
# Copyright (c) 1985 Corporation for Research and Educational Networking
# Copyright (c) 1988 University of Illinois Board of Trustees, Steven
#               Dorner, and Paul Pomes
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#       This product includes software developed by the Corporation for
#       Research and Educational Networking (CREN), the University of
#       Illinois at Urbana, and their contributors.
# 4. Neither the name of CREN, the University nor the names of their
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE TRUSTEES AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE TRUSTEES OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#)$Id: f.unblock,v 1.1 1994/03/12 00:59:25 paul Exp $

# Tape layout is as follows:
# 9     SSN
# 1     pad
# 23    last name
# 15    first name
# 15    middle name
# 15    spouse name
# 75    title
# 25    department
# 25    office number
# 25    office street address
# 16    office city
# 2     office state
# 5     office zip code
# 3     office mailcode
# 10    office phone
# 1     suppress home address (if *)
# 50    home street address
# 15    home city
# 2     home state
# 5     home zip code
# 1     suppress home phone (if *)
# 11    home phone number
# 50    email address (don't use as it's often [email protected])
#
# Start with
# dd if=rmt0 of=fac ibs=4000 cbs=400 conv=ascii
#
# some definitions
#

#
# table of mailcodes to street addresses
%mcTable = (
 "002","2001 s lincoln\\nurbana, il 61801",
 "003","1707 s orchard\\nurbana, il 61801",
 "004","1008 w. hazelwood dr\\nurbana, il 61801",
 "005","1717 philo #24\\nurbana, il 61801",
 "007","511 hazelwood\\nchampaign, il 61820",
 "010","1503 s maryland dr\\nurbana, il 61801",
 "012","1001 w college ct\\nurbana, il 61801",
 "014","1001 w college ct\\nurbana, il 61801",
 "016","1001 w college ct\\nurbana, il 61801",
 "018","906 w college ct\\nurbana, il 61801",
 "020","906 w college ct\\nurbana, il 61801",
 "022","906 w college ct\\nurbana, il 61801",
 "024","805 w pennsylvania\\nurbana, il 61801",
 "026","1109 s lincoln\\nurbana, il 61801",
 "028","1005 s lincoln\\nurbana, il 61801",
 "030","1005 s lincoln\\nurbana, il 61801",
 "032","1005 s lincoln\\nurbana, il 61801",
 "033","1005 w nevada\\nurbana, il 61801",
 "034","907 1/2 w nevada\\nurbana, il 61801",
 "035","1003 nevada\\nurbana, il 61801",
 "036","909 w oregon\\nurbana, il 61801",
 "038","1105 w nevada\\nurbana, il 61801",
 "040","1111 w nevada\\nurbana, il 61801",
 "042","1111 w nevada\\nurbana, il 61801",
 "044","1111 w nevada\\nurbana, il 61801",
 "046","1102 s goodwin\\nurbana, il 61801",
 "048","1102 s goodwin\\nurbana, il 61801",
 "050","1005 w gregory dr\\nurbana, il 61801",
 "052","906 s goodwin\\nurbana, il 61801",
 "056","1114 w nevada\\nurbana, il 61801",
 "059","901 w oregon\\nurbana, il 61801",
 "060","919 w illinois\\nurbana, il 61801",
 "064","912 w illinois\\nurbana, il 61801",
 "065","901 w illinois\\nurbana, il 61801",
 "066","1010 w illinois\\nurbana, il 61801",
 "068","1010 w illinois\\nurbana, il 61801",
 "070","1010 w illinois\\nurbana, il 61801",
 "072","500 s goodwin\\nurbana, il 61801",
 "074","606 s gregory\\nurbana, il 61801",
 "076","408 s goodwin\\nurbana, il 61801",
 "077","300 goodwin\\nurbana, il 61801",
 "102","1301 w green\\nurbana, il 61801",
 "104","1301 w green\\nurbana, il 61801",
 "106","1301 w green\\nurbana, il 61801",
 "110","407 s goodwin\\nurbana, il 61801",
 "112","407 s goodwin\\nurbana, il 61801",
 "114","407 s goodwin\\nurbana, il 61801",
 "116","505 s goodwin\\nurbana, il 61801",
 "118","505 s goodwin\\nurbana, il 61801",
 "120","505 s goodwin\\nurbana, il 61801",
 "122","505 s goodwin\\nurbana, il 61801",
 "123","505 s goodwin\\nurbana, il 61801",
 "134","1205 w oregon\\nurbana, il 61801",
 "140","1207 w oregon \\nurbana, il 61801",
 "142","1201 w nevada\\nurbana, il 61801",
 "144","1204 w nevada\\nurbana, il 61801",
 "146","608 s mathews\\nurbana, il 61801",
 "147","607 s mathews\\nurbana, il 61801",
 "148","607 s mathews\\nurbana, il 61801",
 "150","607 s mathews\\nurbana, il 61801",
 "152","607 s mathews\\nurbana, il 61801",
 "154","708 s mathews\\nurbana, il 61801",
 "156","708 s mathews\\nurbana, il 61801",
 "158","707 s mathews\\nurbana, il 61801",
 "160","707 s mathews\\nurbana, il 61801",
 "162","707 s mathews\\nurbana, il 61801",
 "164","707 s mathews\\nurbana, il 61801",
 "166","707 s mathews\\nurbana, il 61801",
 "168","707 s mathews\\nurbana, il 61801",
 "170","707 s mathews\\nurbana, il 61801",
 "172","707 s mathews\\nurbana, il 61801",
 "174","707 s mathews\\nurbana, il 61801",
 "176","707 s mathews\\nurbana, il 61801",
 "178","707 s mathews\\nurbana, il 61801",
 "180","905 s goodwin\\nurbana, il 61801",
 "182","905 s goodwin\\nurbana, il 61801",
 "184","905 s goodwin\\nurbana, il 61801",
 "186","905 s goodwin\\nurbana, il 61801",
 "188","905 s goodwin\\nurbana, il 61801",
 "190","901 s mathews\\nurbana, il 61801",
 "192","901 s mathews\\nurbana, il 61801",
 "194","901 s mathews\\nurbana, il 61801",
 "221","1002 w green\\nurbana, il 61801",
 "222","1010 w green\\nurbana, il 61801",
 "223","105 s gregory\\nurbana, il 61801",
 "226","1011 w springfield\\nurbana, il 61801",
 "227","1011 w western\\nurbana, il 61801",
 "228","1308 w main\\nurbana, il 61801",
 "230","104 s goodwin\\nurbana, il 61801",
 "232","105 s goodwin\\nurbana, il 61801",
 "233","1101 w springfield\\nurbana, il 61801",
 "234","103 s goodwin\\nurbana, il 61801",
 "236","104 s wright\\nurbana, il 61801",
 "238","104 s mathews\\nurbana, il 61801",
 "240","106 s burrill\\nurbana, il 61801",
 "242","103 s mathews\\nurbana, il 61801",
 "244","1206 w green\\nurbana, il 61801",
 "246","1304 w green\\nurbana, il 61801",
 "248","1304 w green\\nurbana, il 61801",
 "249","208 n wright\\nchampaign, il 61820",
 "250","205 n mathews\\nurbana, il 61801",
 "250","301 n mathews\\nurbana, il 61801",
 "251","405 n mathews\\nurbana, il 61801",
 "252","1110 w main\\nurbana, il 61801",
 "253","1208 w springfield #208\\nurbana, il 61801",
 "254","1212 w springfield\\nurbana, il 61801",
 "256","1304 w springfield\\nurbana, il 61801",
 "258","1304 w springfield\\nurbana, il 61801",
 "262","104 s wright\\nurbana, il 61801",
 "264","1308 w main\\nurbana, il 61801",
 "266","1308 w green\\nurbana, il 61801",
 "268","1308 w green\\nurbana, il 61801",
 "269","1308 w green\\nurbana, il 61801",
 "270","1308 w green\\nurbana, il 61801",
 "272","1308 w green\\nurbana, il 61801",
 "274","1308 w green\\nurbana, il 61801",
 "276","1308 w green\\nurbana, il 61801",
 "278","1308 w green\\nurbana, il 61801",
 "302","502 e john\\nchampaign, il 61820",
 "304","601 e john\\nchampaign, il 61820",
 "306","610 e john\\nchampaign, il 61820",
 "318","801 s wright\\nchampaign, il 61820",
 "320","801 s wright\\nchampaign, il 61820",
 "322","801 s wright\\nchampaign, il 61820",
 "325","801 s wright\\nchampaign, il 61820",
 "332","506 s wright\\nurbana, il 61801",
 "334","506 s wright\\nurbana, il 61801",
 "336","506 s wright\\nurbana, il 61801",
 "338","506 s wright\\nurbana, il 61801",
 "340","506 s wright\\nurbana, il 61801",
 "344","506 s wright\\nurbana, il 61801",
 "346","506 s wright\\nurbana, il 61801",
 "348","506 s wright\\nurbana, il 61801",
 "350","506 s wright\\nurbana, il 61801",
 "352","506 s wright\\nurbana, il 61801",
 "354","506 s wright\\nurbana, il 61801",
 "356","506 s wright\\nurbana, il 61801",
 "358","506 s wright\\nurbana, il 61801",
 "360","506 s wright\\nurbana, il 61801",
 "362","506 s wright\\nurbana, il 61801",
 "364","506 s wright\\nurbana, il 61801",
 "366","502 e john\\nchampaign, il 61820",
 "367","506 s wright\\nurbana, il 61801",
 "368","506 s wright\\nurbana, il 61801",
 "370","506 s wright\\nurbana, il 61801",
 "374","725 s wright\\nchampaign, il 61820",
 "378","715 s wright\\nchampaign, il 61820",
 "380","713 s wright\\nchampaign, il 61820",
 "382","1409 w green\\nurbana, il 61801",
 "384","1401 w green\\nurbana, il 61801",
 "386","1305 w green\\nurbana, il 61801",
 "388","1401 w green\\nurbana, il 61801",
 "390","1001 s wright\\nurbana, il 61801",
 "393","810 s sixth\\nchampaign, il 61820",
 "394","williard airport savoy ",
 "396","510 e daniel\\nchampaign, il 61820",
 "422","403 e healey\\nchampaign, il 61820",
 "423","301 e springfield #104\\nchampaign, il 61820",
 "424","302 e john\\nchampaign, il 61820",
 "426","302 e john\\nchampaign, il 61820",
 "428","302 e john\\nchampaign, il 61820",
 "430","302 e john\\nchampaign, il 61820",
 "431","302 e john\\nchampaign, il 61820",
 "432","302 e john\\nchampaign, il 61820",
 "433","202 univ inn\\nchampaign, il 61820",
 "433","302 e john\\nchampaign, il 61820",
 "436","505 e green\\nchampaign, il 61820",
 "437","505 e green\\nchampaign, il 61820",
 "438","505 e green\\nchampaign, il 61820",
 "440","505 e green\\nchampaign, il 61820",
 "442","610 s sixth\\nchampaign, il 61820",
 "444","606 e healey\\nchampaign, il 61820",
 "446","702 s wright\\nurbana, il 61801",
 "448","702 s wright\\nurbana, il 61801",
 "450","702 s wright\\nurbana, il 61801",
 "452","702 s wright\\nurbana, il 61801",
 "454","702 s wright\\nurbana, il 61801",
 "456","702 s wright\\nurbana, il 61801",
 "458","702 s wright\\nurbana, il 61801",
 "460","702 s wright\\nurbana, il 61801",
 "462","810 s wright\\nurbana, il 61801",
 "464","810 s wright\\nurbana, il 61801",
 "466","810 s wright\\nurbana, il 61801",
 "468","810 s wright\\nurbana, il 61801",
 "472","1400 w park\\nurbana, il 61801",
 "474","611 w park\\nurbana, il 61801",
 "476","605 e springfield\\nchampaign, il 61820",
 "477","501 s sixth\\nchampaign, il 61820",
 "478","1307 w park\\nurbana, il 61801",
 "482","901 s sixth\\nchampaign, il 61820",
 "484","909 s sixth\\nchampaign, il 61820",
 "486","911 s sixth\\nchampaign, il 61820",
 "488","510 e chalmers\\nchampaign, il 61820",
 "490","909 s fifth\\nchampaign, il 61820",
 "492","912 s fifth\\nchampaign, il 61820",
 "493","501 e daniel\\nchampaign, il 61820",
 "496","409 e chalmers\\nchampaign, il 61820",
 "498","409 e chalmers\\nchampaign, il 61820",
 "502","409 e chalmers\\nchampaign, il 61820",
 "504","504 e armory\\nchampaign, il 61820",
 "521","201 john\\nchampaign, il 61820",
 "522","1408 w gregory dr\\nurbana, il 61801",
 "523","1004 s fourth\\nchampaign, il 61820",
 "524","1103 s sixth\\nchampaign, il 61820",
 "525","406 e armory\\nchampaign, il 61820",
 "526","505 e armory\\nchampaign, il 61820",
 "528","505 e armory\\nchampaign, il 61820",
 "530","505 e armory\\nchampaign, il 61820",
 "532","505 e armory\\nchampaign, il 61820",
 "534","505 e armory\\nchampaign, il 61820",
 "536","505 e armory\\nchampaign, il 61820",
 "539","505 e armory\\nchampaign, il 61820",
 "540","101 e gregory dr\\nchampaign, il 61820",
 "542","101 e gregory dr\\nchampaign, il 61820",
 "544","101 e gregory dr\\nchampaign, il 61820",
 "546","301 e gregory\\nchampaign, il 61820",
 "548","1203 s fourth\\nchampaign, il 61820",
 "550","206 e peabody dr\\nchampaign, il 61820",
 "552","206 e peabody dr\\nchampaign, il 61820",
 "554","206 e peabody dr\\nchampaign, il 61820",
 "555","200 e florida\\nchampaign, il 61820",
 "556","201 e peabody dr\\nchampaign, il 61820",
 "558","57 e armory\\nchampaign, il 61820",
 "562","52 e gregory dr\\nchampaign, il 61820",
 "563","52 e gregory dr\\nchampaign, il 61820",
 "564","52 e gregory dr\\nchampaign, il 61820",
 "566","1325 s oak\\nchampaign, il 61820",
 "568","24 e green\\nchampaign, il 61820",
 "570","54 e gregory dr\\nchampaign, il 61820",
 "572","1117 s oak\\nchampaign, il 61820",
 "574","1207 s oak\\nchampaign, il 61820",
 "576","23 e stadium dr\\nchampaign, il 61820",
 "580","1321 s oak\\nchampaign, il 61820",
 "584","1206 s fourth\\nchampaign, il 61820",
 "586","1206 s fourth\\nchampaign, il 61820",
 "588","1206 s fourth\\nchampaign, il 61820",
 "590","408 e peabody dr\\nchampaign, il 61820",
 "592","500 e peabody dr\\nchampaign, il 61820",
 "594","504 e pennsylvania\\nchampaign, il 61820",
 "596","57 e green\\nchampaign, il 61820",
 "622","608 e lorado taft dr\\nchampaign, il 61820",
 "624","608 e lorado taft dr\\nchampaign, il 61820",
 "626","1403 w lorado taft dr\\nurbana, il 61801",
 "630","1207 w gregory dr\\nurbana, il 61801",
 "631","1107 s dorner\\nurbana, il 61801",
 "634","1201 s dorner\\nurbana, il 61801",
 "635","1101 w peabody\\nchampaign, il 61820",
 "636","1103 w dorner dr\\nurbana, il 61801",
 "640","1302 w pennsylvania\\nurbana, il 61801",
 "642","1208 w pennsylvania\\nurbana, il 61801",
 "644","1304 w pennsylvania\\nurbana, il 61801",
 "646","1304 w pennsylvania\\nurbana, il 61801",
 "650","607 e peabody dr\\nchampaign, il 61820",
 "652","607 e peabody dr\\nchampaign, il 61820",
 "654","1800 s first\\nchampaign, il 61820",
 "656","1800 s first\\nchampaign, il 61820",
 "658","1817 s neil\\nchampaign, il 61820",
 "662","1609 s oak\\nchampaign, il 61820",
 "663","1611 s oak\\nchampaign, il 61820",
 "664","1 e st mary's rd\\nchampaign, il 61820",
 "666","2201 s first\\nchampaign, il 61820",
 "670","51 gerty dr #174\\nchampaign, il 61820",
 "672","51 gerty dr #105\\nchampaign, il 61820",
 "674","2204 griffith dr\\nchampaign, il 61820",
 "675","11 gerty dr\\nchampaign, il 61820",
 "676","1 e hazelwood dr\\nurbana, il 61801",
 "677","1701 s oak\\nchampaign, il 61820",
 "702","1406 w green\\nurbana, il 61801",
 "704","1110 w green\\nurbana, il 61801",
 "704","1110 w green\\nurbana, il 61801",
 "706","1206 s sixth\\nchampaign, il 61820",
 "708","1310 s sixth\\nchampaign, il 61820",
 "710","1301 w gregory dr\\nurbana, il 61801",
 "712","600 s mathews\\nurbana, il 61801",
 "714","506 s mathews\\nurbana, il 61801",
 "716","603 e daniel\\nchampaign, il 61820",
 "718","608 s wright\\nurbana, il 61801",
 "720","608 s wright\\nurbana, il 61801",
 "800","1501 s oak\\nchampaign, il 61820"
);

#
# beginning of interesting stuff
#

#
# usage
if ($#ARGV<0) {print STDERR "usage: f.unblock prod.cnf [files]\n";exit 1;}

#
# Datestamp
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += ($year < 70) ? 2000 : 1900;
$Date = sprintf("%d/%d", $mon+1, $year);

#
# Initialize the password arrays
$DictFile = "/usr/share/lib/dict/words";
open(DICT, "<$DictFile") || die "$DictFile: $!\n";
while (<DICT>)
{
 chop;
 next if (/\W/ || /[A-Z][A-Z]/);
 if (length == 3)
 {
   push(ThreeWord, $_);
 }
 elsif (length == 4)
 {
   push(FourWord, $_);
 }
}
close(DICT);

@Punct = (2..9, '!', '*', '#', '$', '%', '&', '-', '+', '=', '<', '>', '?');
srand(time|$$);

#
# read prod.cnf
$config = shift;
open(CONFIG,"<$config") || die "$config: $!\n";
while (<CONFIG>)
{
 chop;
 if (/^#/) {next;}
 if (length==0) {next;}
 split(/:/);
 if (@_ < 2) {next;}
 $fid{$_[1]} = $_[0];
}
close(CONFIG);

#
# here we go...
while (<>)
{
 tr/A-Z/a-z/;
 if (length($_)<20) {next;}    # sanity check

 ($id,$lName,$fName,$mName,$spouse,$title,$dept,
  $offNum,$offSt,$offCity,$offState,$offZip,$offMC,$offPhone,
  $supHomeAddr,$homeSt,$homeCity,$homeState,$homeZip,$supHomePhone,$homePhone,
  $email)
   = unpack("A9xA23A15A15A15A75A25A25A25A16A2A5A3A10A1A50A15A3A5A1A11A50",$_);

 $name = $lName;
 $name = &SepCat($name," ",$fName);
 $name = &SepCat($name," ",$mName);

 $offPhone = &FixPhone($offPhone);
 $homePhone = $supHomePhone ne "" ? "" : &FixPhone($homePhone);

 if ($supHomeAddr ne "")
 {
   $homeAddr = "";
 }
 else
 {
   if ($homeCity eq "c")
   {
     $homeCity = "champaign";
     if ($homeZip eq "") {$homeZip = "61820";}
   }
   elsif ($homeCity eq "u")
   {
     $homeCity = "urbana";
     if ($homeZip eq "") {$homeZip = "61801";}
   }
   if ($homeState eq "") {$homeState = "il";}

   $homeAddr = $homeSt;
   $homeRest = $homeCity;
   $homeRest = &SepCat($homeRest,", ",$homeState);
   $homeRest = &SepCat($homeRest," ",$homeZip);
   $homeAddr = &SepCat($homeAddr,"\\n",$homeRest);
 }

 $offAddr = $offNum;
 $offAddr = &SepCat($offAddr,", MC ",$offMC);
 if ($offMC ne "")
 {
   $offAddr = &SepCat($offAddr,"\\n",$mcTable{$offMC});
 }
 else
 {
   $offRest = $offCity;
   $offRest = &SepCat($offRest,", ",$offState);
   $offRest = &SepCat($offRest," ",$offZip);
   $offAddr = &SepCat($offAddr,"\\n",$offSt);
   $offAddr = &SepCat($offAddr,"\\n",$offRest);
 }

 #
 # create default password
 #
 $Password = &GenPass();

 $out = $fid{"id"} . ":" . $id . "\t4:person phone";
 $out = &SepCat($out,"\t".$fid{"name"}.":",$name);
 $out = &SepCat($out,"\t".$fid{"title"}.":",$title);
 $out = &SepCat($out,"\t".$fid{"department"}.":",$dept);
 $out = &SepCat($out,"\t".$fid{"office_address"}.":",$offAddr);
 $out = &SepCat($out,"\t".$fid{"office_phone"}.":",$offPhone);
 $out = &SepCat($out,"\t".$fid{"home_address"}.":",$homeAddr);
 $out = &SepCat($out,"\t".$fid{"home_phone"}.":",$homePhone);
 $out = &SepCat($out,"\t".$fid{"created"}.":",$Date);
 $out = &SepCat($out,"\t".$fid{"password"}.":",$Password);

 # fix this bit of stupidity
 $out =~ s/ ,/, /g;

 # and print it...
 print $out . "\n";
}

sub FixPhone
{
 $phone = $_[0];
 if (length($phone)==7)
 {
   $phone =~ s/.../(217) $&-/;
 }
 elsif (length($phone)==10)
 {
   $phone =~ s/(...)(...)/($1) $2-/;
 }
 $phone;
}

sub SepCat
{
 ($str1,$sep,$str2) = @_;
 ($str1 ne "" && $str2 ne "") ? ($str1 .= $sep . $str2) : ($str1 .= $str2);
}

sub GenPass
{
 local($word1, $word2, $sep);
 if (rand() < 0.5)
 {
   $word1 = $ThreeWord[rand(@ThreeWord)];
   $word2 = $FourWord[rand(@FourWord)];
 }
 else
 {
   $word1 = $FourWord[rand(@FourWord)];
   $word2 = $ThreeWord[rand(@ThreeWord)];
 }
 $sep = $Punct[rand(@Punct)];
 $word1 .= $sep . $word2;
 return($word1);
}