2.0wolc/deity/
#!/usr/local/bin/perl

require "fread.pl";
require "defaults.pl";

$filein = $ARGV[0];
if (defined($ARGV[1]) && ($ARGV[1] eq "debug"))
{
    $debug = "yes";
}

undef @Exits;
open (FILE, "$filein")||die("Can't open input file\n");
$pointer = 0;
$a = 0;
$last = 0;
print "$filein\n";

while ($last == 0)
{
    while (fread_letter() ne '#') {fread_to_eol();}
    $atype = fread_word();
       if ($atype eq "AREA")	{fread_area();}
    elsif ($atype eq "MOBILES")	{fread_mobiles();}
    elsif ($atype eq "OBJECTS")	{fread_objects();}
    elsif ($atype eq "ROOMS")	{fread_rooms();}
    elsif ($atype eq "RESETS")	{fread_resets();}
    elsif ($atype eq "SHOPS")	{fread_shops();}
    elsif ($atype eq "SPECIALS"){fread_specials();}
    elsif ($atype eq "\$")	{$last = 1;}
}
close FILE;

for ($i = 0; $i < 111; $i++)
{
    $mlev{$i} = 0;
}
foreach $vnum (sort bynum(keys(%m_name)))
{
    if (!defined($m_shopkeep{$vnum}))
    {
	$tmp = int($m_level{$vnum});
	$mlev{$tmp}++;
    }
}
open(OUT, ">rot.levels");
for ($i = 1; $i < 111; $i+=2)
{
    $j = $i+1;
    print OUT "$i\t$mlev{$i}\t\t$j\t$mlev{$j}\n";
}
close OUT;
print "The following external exits were found:\n";
foreach $tmp (sort(@Exits))
{
    print "\t$tmp\n";
}
exit;



sub fread_area
{
    print "Reading AREA\n";
    $areatype = fread_string();
    $areafile = fread_string();
    $title = fread_string();
    $levels = fread_levels();
    $author = sprintf("%-7s", fread_word());
    fread_to_eol();
    $minvnum = fread_number();
    $maxvnum = fread_number();
    @Filepath = split(/\//, $fileout);
    $outfilename = $Filepath[$#Filepath];
    return;
}

sub fread_mobiles
{
    print "Reading MOBILES\n";
    $vnum = 1;
    while ($vnum != 0)
    {
	while (fread_letter() ne '#')
	    {fread_to_eol();}
	$vnum = fread_number();
	if (defined($debug))
	{
	    print "\t$vnum\n";
	}
	if ($vnum == 0)
	{
	    next;
	}
        if (defined($debug)) 
        { 
            print "\t\tname\n"; 
        } 
	$m_name{$vnum} = fread_string();
        if (defined($debug))  
        {  
            print "\t\tshort\n";  
        }
	$m_short{$vnum} = fread_string();
        if (defined($debug))  
        {  
            print "\t\tlong\n";  
        }
	$m_long{$vnum} = fread_string();
        if (defined($debug))  
        {  
            print "\t\textended\n";  
        }
	$m_extended{$vnum} = fread_string();
	if (defined($debug))      
	{     
	    print "\t\trace\n";     
	}    
	$m_rac{$vnum} = fread_string();
        if (defined($debug))  
        {  
            print "\t\tact\n";  
        }
	$m_act{$vnum} = fread_flag();
        if (defined($debug))  
        {  
            print "\t\taffects\n";  
        }
	$m_aff{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\tshields\n";
        }
	$m_shd{$vnum} = fread_flag();
        if (defined($debug))  
        {  
            print "\t\talignment\n";  
        }
	$m_align{$vnum} = fread_number();
        if (defined($debug))  
        {  
            print "\t\tgroup\n";  
        }
	$m_group{$vnum} = fread_number();
        if (defined($debug))  
        {  
            print "\t\tlevel\n";  
        }
	$m_level{$vnum} = fread_number();
	$level = int($m_level{$vnum});
	$level += $levch;
	if ($level > 110)
	{ 
	    $level = 110;
	}
	if ($level < 0)
	{
	    $level = 0;
	}
	$m_level{$vnum} = $level;
        if (defined($debug))  
        {  
            print "\t\thit roll\n";  
        }
	$m_hr{$vnum} = fread_number();
        if (defined($debug))  
        {  
            print "\t\thit dice\n";  
        }
	$m_hdice{$vnum} = fread_word();
        if (defined($debug))  
        {  
            print "\t\tmana dice\n";  
        }
	$m_mdice{$vnum} = fread_word();
        if (defined($debug))  
        {  
            print "\t\tdamage dice\n";  
        }
	$m_ddice{$vnum} = fread_word();
        if (defined($debug))  
        {  
            print "\t\tdamage type\n";  
        }
	$m_dtype{$vnum} = fread_word();
        if (defined($debug))
        {
            print "\t\tAC 1\n";
        }
	$m_ac1{$vnum} = fread_number();
        if (defined($debug))
        {
            print "\t\tAC 2\n";
        }
	$m_ac2{$vnum} = fread_number();
        if (defined($debug))
        {
            print "\t\tAC 3\n";
        }
	$m_ac3{$vnum} = fread_number();
        if (defined($debug))
        {
            print "\t\tAC 4\n";
        }
	$m_ac4{$vnum} = fread_number();
        if (defined($debug))
        {
            print "\t\toffensive\n";
        }
	$m_off{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\timmune\n";
        }
	$m_imm{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\tresist\n";
        }
	$m_res{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\tvulnerable\n";
        }
	$m_vul{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\tstart position\n";
        }
	$m_pos1{$vnum} = fread_word();
        if (defined($debug))
        {
            print "\t\tdefault position\n";
        }
	$m_pos2{$vnum} = fread_word();
        if (defined($debug))  
        {  
            print "\t\tsex\n";  
        }
	$m_sex{$vnum} = fread_word();
        if (defined($debug))
        {
            print "\t\ttreasure\n";
        }
	$m_gold{$vnum} = fread_number();
        if (defined($debug))
        {
            print "\t\tform\n";
        }
	$m_form{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\tparts\n";
        }
	$m_parts{$vnum} = fread_flag();
        if (defined($debug))
        {
            print "\t\tsize\n";
        }
	$m_size{$vnum} = fread_word();
        if (defined($debug))
        {
            print "\t\tmaterial\n";
        }
	$m_material{$vnum} = fread_word();
	$lastline = 0;
	while ($lastline == 0)
	{
	    if (defined($debug))
	    {
		print "\t\tExtras:\n";
	    }
	    $tmp = fread_letter();
	    if ($tmp eq '#')
	    {
		$pointer--;
		$lastline = 1;
		next;
	    }
	    if ($tmp eq 'D')
	    {
		if (defined($debug))
		{
		    print "\t\t\tdeath message\n";
		}
		$m_death{$vnum} = fread_string();
		next;
	    }
	    if ($tmp eq 'T')
	    {
		if (defined($debug))
		{
		    print "\t\t\tgreet message\n";
		}
		$m_greet{$vnum} = fread_string();
		next;
	    }
	    if ($tmp eq 'C')
	    {
		if (defined($debug))
		{
		    print "\t\t\tclan\n";
		}
		$m_clan{$vnum} = fread_string();
		next;
	    }
	    if ($tmp eq 'F')
	    {
		if (defined($debug))
		{
		    print "\t\t\tremove flags\n";
		}
		$pos = fread_word();
		$val = fread_flag();
		if ($pos eq "act")
		{
		    $m_flag_act{$vnum} = $val;
		} elsif ($pos eq "aff")
		{
		    $m_flag_aff{$vnum} = $val;
		} elsif ($pos eq "shd")
		{
		    $m_flag_shd{$vnum} = $val;
		} elsif ($pos eq "off")
		{
		    $m_flag_off{$vnum} = $val;
		} elsif ($pos eq "imm")
		{
		    $m_flag_imm{$vnum} = $val;
		} elsif ($pos eq "res")
		{
		    $m_flag_res{$vnum} = $val;
		} elsif ($pos eq "vul")
		{
		    $m_flag_vul{$vnum} = $val;
		} elsif ($pos eq "for")
		{
		    $m_flag_for{$vnum} = $val;
		} elsif ($pos eq "par")
		{
		    $m_flag_par{$vnum} = $val;
		}   
	    }
	}
    }
    return;
}

sub fread_objects
{
    print "Reading OBJECTS\n";
    $vnum = 1;
    while ($vnum != 0)
    {
	while (fread_letter() ne '#')
	    {fread_to_eol();}
	$vnum = fread_number();
	if (defined($debug))
	{
	    print "\t$vnum\n";
	}
	if ($vnum == 0)
	{
	    next;
	}
	if (defined($debug))
	{
	    print "\t\tname\n";
	}
	$o_name{$vnum} = fread_string();
	if (defined($debug))
	{
	    print "\t\tshort\n";
	}
	$o_short{$vnum} = fread_string();
	if (defined($debug))
	{
	    print "\t\tlong\n";
	}
	$o_long{$vnum} = fread_string();
	if (defined($debug))
	{
	    print "\t\tmaterial\n";
	}
	$o_material{$vnum} = fread_string();
	if (defined($debug))
	{
	    print "\t\ttype\n";
	}
	$o_type{$vnum} = fread_word();
	if (defined($debug))
	{
	    print "\t\textra\n";
	}
	$o_extra{$vnum} = fread_flag();
	if (defined($debug))
	{
	    print "\t\twear\n";
	}
	$o_wear{$vnum} = fread_flag();
	if (defined($debug))
	{
	    print "\t\tV0-V4\n";
	}
	$o_v0{$vnum} = fread_word();
	$o_v1{$vnum} = fread_word();
	$o_v2{$vnum} = fread_word();
	$o_v3{$vnum} = fread_word();
	$o_v4{$vnum} = fread_word();
	if (defined($debug))
	{
	    print "\t\tlevel\n";
	}
	$o_level{$vnum} = fread_number();
	$level = int($o_level{$vnum});
	$level += $levch;
	if ($level > 110)
	{ 
	    $level = 110;
	}
	if ($level < 0)
	{
	    $level = 0;
	}
	$o_level{$vnum} = $level;
	if (defined($debug))
	{
	    print "\t\tweight\n";
	}
	$o_weight{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tcost\n";
	}
	$o_cost{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tcondition\n";
	}
	$o_cond{$vnum} = fread_letter();
	$lastline = 0;
	$extrapoint = 0;
	$applypoint = 0;
	$flagpoint = 0;
	while ($lastline == 0)
	{
	    if (defined($debug))
	    {
		print "\t\tExtras:\n";
	    }
	    $tmp = fread_letter();
	    if ($tmp eq '#')
	    {
		$pointer--;
		$lastline = 1;
		next;
	    }
	    if ($tmp eq 'C')
	    {
		if (defined($debug))
		{
		    print "\t\t\tclan\n";
		}
		$o_clan{$vnum} = fread_string();
		next;
	    }
	    if ($tmp eq 'G')
	    {
		if (defined($debug))
		{
		    print "\t\t\tguild\n";
		}
		$o_guild{$vnum} = fread_string();
		next;
	    }
	    if ($tmp eq 'E')
	    {
		$extrapoint++;
		$tmp = "${vnum}:${extrapoint}";
		if (defined($debug))
		{
		    print "\t\t\textended key\n";
		}
		$o_extkey{$tmp} = fread_string();
		if (defined($debug))
		{
		    print "\t\t\textended desc\n";
		}
		$o_extend{$tmp} = fread_string();
		next;
	    }
	    if ($tmp eq 'A')
	    {
		if (defined($debug))
		{
		    print "\t\t\tapply pos\n";
		}
		$pos = fread_number();
		if (defined($debug))
		{
		    print "\t\t\tapply value\n";
		}
		$val = fread_number();
		$applypoint++;
		$tmp = "${vnum}:${applypoint}";
		$o_apply{$tmp} = "$pos $val";
		next;
	    }
	    if ($tmp eq 'F')
	    {
		if (defined($debug))
		{
		    print "\t\t\tflag pos\n";
		}
		$pos = fread_letter();
		if (defined($debug))
		{
		    print "\t\t\tflag apply pos\n";
		}
		$apos = fread_number();
		if (defined($debug))
		{
		    print "\t\t\tflag apply val\n";
		}
		$aval = fread_number();
		if (defined($debug))
		{
		    print "\t\t\tflag val\n";
		}
		$val = fread_flag();
		$flagpoint++;
		$tmp = "${vnum}:${flagpoint}";
		$o_flag{$tmp} = "$pos $apos $aval $val";
	    }
	}
    }
    return;
}

sub fread_rooms
{
    print "Reading ROOMS\n";
    $vnum = 1;
    while ($vnum != 0)
    {
	while (fread_letter() ne '#')
	    {fread_to_eol();}
	$vnum = fread_number();
	if (defined($debug))
	{
	    print "\t$vnum\n";
	}
	if ($vnum == 0)
	{
	    next;
	}
	if (defined($debug))
	{
	    print "\t\tname\n";
	}
	$r_name{$vnum} = fread_string();
	if (defined($debug))
	{
	    print "\t\tdescription\n";
	}
	$r_desc{$vnum} = fread_string();
	if (defined($debug))
	{
	    print "\t\tarea num\n";
	}
	fread_number();
	if (defined($debug))
	{
	    print "\t\troom flags\n";
	}
	$r_flags{$vnum} = fread_flag();
	if (defined($debug))
	{
	    print "\t\tsector type\n";
	}
	$r_sector{$vnum} = fread_number();
	$lastline = 0;
	$extrapoint = 0;
	while ($lastline == 0)
	{
	    if (defined($debug))
	    {
		print "\t\tExtras:\n";
	    }
	    $tmp = fread_letter();
	    if ($tmp eq '#')
	    {
		$pointer--;
		$lastline = 1;
		next;
	    }
	    if ($tmp eq 'C')
	    {
		if (defined($debug))
		{
		    print "\t\t\tclan\n";
		}
		$r_clan{$tmp} = fread_string();
		next;
	    }
	    if ($tmp eq 'M')
	    {
		if (defined($debug))
		{
		    print "\t\t\tmana\n";
		}
		$r_mana{$tmp} = fread_number();
		next;
	    }
	    if ($tmp eq 'H')
	    {
		if (defined($debug))
		{
		    print "\t\t\theal\n";
		}
		$r_heal{$tmp} = fread_number();
		next;
	    }
	    if ($tmp eq 'E')
	    {
		$extrapoint++;
		$tmp = "${vnum}:${extrapoint}";
		if (defined($debug))
		{
		    print "\t\t\textended key\n";
		}
		$r_extkey{$tmp} = fread_string();
		if (defined($debug))
		{
		    print "\t\t\textended description\n";
		}
		$r_extend{$tmp} = fread_string();
		next;
	    }
	    if ($tmp eq 'D')
	    {
		if (defined($debug))
		{
		    print "\t\t\tdoor #\n";
		}
		$dir = fread_number();
		$tmp = "${vnum}:${dir}";
		if (defined($debug))
		{
		    print "\t\t\tdoor look\n";
		}
		$r_doorlook{$tmp} = fread_string();
		if (defined($debug))
		{
		    print "\t\t\tdoor keyword\n";
		}
		$r_doorkeyw{$tmp} = fread_string();
		if (defined($debug))
		{
		    print "\t\t\tdoor type\n";
		}
		$r_doorlock{$tmp} = fread_number();
		if (defined($debug))
		{
		    print "\t\t\tdoor key\n";
		}
		$r_doorkey{$tmp} = fread_number();
		if (defined($debug))
		{
		    print "\t\t\tdoor to_room\n";
		}
		$r_doorto{$tmp} = fread_number();
		if (($r_doorto{$tmp} < $minvnum)
		||  ($r_doorto{$tmp} > $maxvnum))
		{
		    $temp = "${vnum} -> ${dir} -> $r_doorto{$tmp}";
		    push(@Exits, $temp);
		}
	    }
	}
    }
    return;
}

sub fread_resets
{
    print "Reading RESETS\n";
    $rm = 0;
    $ro = 0;
    $rp = 0;
    $rg = 0;
    $re = 0;
    $rd = 0;
    $rr = 0;
    $inc = 0;
    while (fread_letter() ne 'S')
    {
	$inc++;
	$pointer--;
	$type = fread_letter();
	if (defined($debug))
	{
	    print "\t$type\n";
	}
	if ($type eq 'M')
	{
	    $rm++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $rm_p1{$rm} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tmob vnum\n";
	    }
	    $rm_vnum{$rm} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tmob global limit\n";
	    }
	    $rm_glob{$rm} = fread_number();
	    if ($rm_glob{$rm} == 0)
	    {
		$rm_glob{$rm} = -1;
	    }
	    if (defined($debug))
	    {
		print "\t\tmob to_room\n";
	    }
	    $rm_room{$rm} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tmob local limit\n";
	    }
	    $rm_local{$rm} = fread_number();
	    if ($rm_local{$rm} == 0)
	    {
		$rm_local{$rm} = -1;
	    }
	} elsif ($type eq 'O')
	{
	    $ro++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $ro_p1{$ro} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tobject vnum\n";
	    }
	    $ro_vnum{$ro} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $ro_p2{$ro} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tobject to_room\n";
	    }
	    $ro_room{$ro} = fread_number();
	    $ro_inc{$ro} = $inc;
	} elsif ($type eq 'P')
	{
	    $rp++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $rp_p1{$rp} = fread_number();
	    $rp_p1{$rp} = 1;
	    if (defined($debug))
	    {
		print "\t\tput vnum\n";
	    }
	    $rp_vnum{$rp} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $rp_p2{$rp} = fread_number();
	    $rp_p2{$rp} = 1;
	    if (defined($debug))
	    {
		print "\t\tput to_object\n";
	    }
	    $rp_to{$rp} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tput copies\n";
	    }
	    $rp_copy{$rp} = fread_number();
	    $jo = $ro;
	    $jg = $rg;
	    $je = $re;
	    $ko = 0;
	    $kg = 0;
	    $ke = 0;
	    $found = 0;
	    while ($found == 0)
	    {
		if ($jo == 0)
		{
		    $found = 1;
		} elsif ($rp_to{$rp} == $ro_vnum{$jo})
		{
		    $found = 1;
		    $ko = $ro_inc{$jo};
		} else
		{
		    $jo--;
		}
	    }
	    $found = 0;
	    while ($found == 0)
	    {
		if ($jg == 0)
		{
		    $found = 1;
		} elsif ($rp_to{$rp} == $rg_vnum{$jg})
		{
		    $found = 1;
		    $kg = $rg_inc{$jg};
		} else
		{
		    $jg--;
		}
	    }
	    $found = 0;
	    while ($found == 0)
	    {
		if ($je == 0)
		{
		    $found = 1;
		} elsif ($rp_to{$rp} == $re_vnum{$je})
		{
		    $found = 1;
		    $ke = $re_inc{$je};
		} else
		{
		    $je--;
		}
	    }
	    $ru = 0;
	    if ($ko > $kg)
	    {
		$ru = $ko;
		$rp_type{$rp} = "object";
	    } else
	    {
		$ru = $kg;
		$rp_type{$rp} = "give";
	    }
	    if ($ke > $ru)
	    {
		$ru = $ke;
		$rp_type{$rp} = "equip";
	    }
	    if ($rp_type{$rp} eq "object")
	    {
		$rp_under{$rp} = $jo;
	    } elsif ($rp_type{$rp} eq "give")
	    {
		$rp_under{$rp} = $jg;
	    } else
	    {
		$rp_under{$rp} = $je;
	    }
	} elsif ($type eq 'G')
	{
	    $rg++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $rg_p1{$rg} = fread_number();
	    if ($rg_p1{$rg} == 0)
	    {
		$rg_p1{$rg} = 1;
	    }
	    if (defined($debug))
	    {
		print "\t\tgive vnum\n";
	    }
	    $rg_vnum{$rg} = fread_number();
	    $rg_under{$rg} = $rm;
	    if (defined($debug))
	    {
		print "\t\tgive limit\n";
	    }
	    $rg_limit{$rg} = fread_number();
	    if ($rg_limit{$rg} == 0)
	    {
		$rg_limit{$rg} = -1;
	    }
	    $rg_inc{$rg} = $inc;
	} elsif ($type eq 'E')
	{
	    $re++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $re_p1{$re} = fread_number();
	    if ($re_p1{$re} == 0)
	    {
		$re_p1{$re} = 1;
	    }
	    if (defined($debug))
	    {
		print "\t\tequip vnum\n";
	    }
	    $re_vnum{$re} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tequip limit\n";
	    }
	    $re_limit{$re} = fread_number();
	    if ($re_limit{$re} == 0)
	    {
		$re_limit{$re} = -1;
	    }
	    if (defined($debug))
	    {
		print "\t\tequip wear\n";
	    }
	    $re_wear{$re} = fread_number();
	    $re_under{$re} = $rm;
	    $re_inc{$re} = $inc;
	} elsif ($type eq 'D')
	{
	    $rd++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $rd_p1{$rd} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tdoor room\n";
	    }
	    $rd_room{$rd} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tdoor direction\n";
	    }
	    $rd_door{$rd} = fread_number();
	    if (defined($debug))
	    {
		print "\t\tdoor state\n";
	    }
	    $rd_stat{$rd} = fread_number();
	} elsif ($type eq 'R')
	{
	    $rr++;
	    if (defined($debug))
	    {
		print "\t\tplaceholder\n";
	    }
	    $rr_p1{$rr} = fread_number();
	    if (defined($debug))
	    {
		print "\t\trandom room\n";
	    }
	    $rr_room{$rr} = fread_number();
	    if (defined($debug))
	    {
		print "\t\trandom max_direction\n";
	    }
	    $rr_door{$rr} = fread_number();
	}
	if (defined($debug))
	{
	    print "\t\tcomment\n";
	}
	fread_to_eol();
    }

    return;
}

sub fread_shops
{
    print "Reading SHOPS\n";
    $vnum = 1;
    while ($vnum != 0)
    {
	$vnum = fread_number();
	if (defined($debug))
	{
	    print "\t$vnum\n";
	}
	if ($vnum == 0)
	{
	    next;
	}
	$m_shopkeep{$vnum} = "yes";
	if (defined($debug))
	{
	    print "\t\tsell1\n";
	}
	$sell1{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tsell2\n";
	}
	$sell2{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tsell3\n";
	}
	$sell3{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tsell4\n";
	}
	$sell4{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tsell5\n";
	}
	$sell5{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tbuy percent\n";
	}
	$buyp{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tsell percent\n";
	}
	$sellp{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\topen\n";
	}
	$open{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tclose\n";
	}
	$close{$vnum} = fread_number();
	if (defined($debug))
	{
	    print "\t\tcomment\n";
	}
	fread_to_eol();
    }
    return;
}

sub fread_specials
{
    print "Reading SPECIALS\n";
    while (fread_letter() ne 'S')
    {
	$pointer--;
	$type = fread_letter();
	if ($type eq 'M')
	{
	    $vnum = fread_number();
	    if (defined($debug))
	    {
		print "\t$vnum\n";
	    }
	    if (defined($debug))
	    {
		print "\t\tspecial\n";
	    }
	    $spec{$vnum} = fread_word();
	    if (defined($debug))
	    {
		print "\t\tcomment\n";
	    }
	    fread_to_eol();
	} else {
	    if (defined($debug))
	    {
		print "\t\t\tEOL\n";
	    }
	    fread_to_eol();
	}
    }
    return;
}

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