#!/usr/bin/perl -w
use strict;
require "Utilities.pl";
# Procedure definitions.
sub print_time {
my $time_to_print = $_[0];
my $end = $_[1] || 0;
print "
" unless $end;
if ($time_to_print == int($time_to_print)) {
print "", sprintf ("%02d", $time_to_print % 24), ":00 | ";
}
print "
" if $end;
}
# Create some constants.
my @WEEK = qw(
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
);
# Read in the parameter, use Origins2003 as the default, since that was what this program was written for originally.
my $schedule_name = $ENV{'QUERY_STRING'} || "Origins2004";
# Make sure that header and schedule information exist for the requested schedule.
unless (-e "${schedule_name}_header.pl" and -e "${schedule_name}_schedule.psv") {
print qq(Content-type: text/html\n\n);
exit;
}
# Read in the data specific to this schedule.
our @areas;
require "${schedule_name}_header.pl";
# Load in the schedule.
my @schedule = load_from ("${schedule_name}_schedule.psv");
# Load in organizers.
my @organizers = load_from ("Organizers.psv");
# Rearrange organizers into a hash.
my ($organizer, %organizers, $url);
foreach $organizer (@organizers) {
$url = $organizer->{Organizer};
$url = "{Link}>$url" if $organizer->{Link};
$organizers{$organizer->{Nickname}} = $url;
}
# Create a graph with this information.
my ($day, $start_time, $area, $event, $end_time, $search_event, $place_holder);
foreach $day (@WEEK) {
my $found_events_on_this_day = 0;
my $end_of_the_day = 24;
for ($start_time = 0; $start_time < $end_of_the_day; $start_time += 0.5) {
START_TIME:
print_time ($start_time) if $found_events_on_this_day;
foreach $area (@areas) {
$event = 0;
foreach $search_event (@schedule) {
next unless $search_event->{Day} eq $day;
next unless $search_event->{Time} == $start_time;
next unless $search_event->{Area} eq $area;
if ($search_event->{Event} eq "End") {
$end_of_the_day = 0;
next;
}
if ($event) {
$event->{Event} .= "
Conflict $search_event->{Event}";
} else {
$event = $search_event;
}
}
unless ($event) {
print " | " if $found_events_on_this_day;
next;
}
# Found an event, so show it on the table. Create a new table if necessary, and jump back to the start of this row.
unless ($found_events_on_this_day) {
print "$event->{Day}
\n";
print "\n";
print "Time | ";
my $area_header;
foreach $area_header (@areas) {
print "$area_header | ";
}
print "Time |
\n";
$found_events_on_this_day = 1;
goto START_TIME;
}
# Skip if this is just a place holder.
next unless $event->{Event};
# Show event information.
print "";
# Don't print the event name if it equals the area name.
print "$event->{Event}" if $event->{Event} ne $event->{Area};
print "";
if ($event->{Organizer}) {
my $divider = ($event->{Event} eq $event->{Area} ? "" : " ");
foreach $organizer (split ",", $event->{Organizer}) {
print $divider;
print ($organizers{$organizer} or " ");
$divider = " ";
}
}
# Not printing maximum number of players on this chart anymore.
# print " $event->{Players} players max" if $event->{Players};
print " Age $event->{Age} and up" if $event->{Age} and $event->{Age} > 10;
print " | \n";
# Fill in place holders for long events.
$end_time = $start_time + $event->{Length};
for ($place_holder = $start_time + 0.5; $place_holder < $end_time; $place_holder += 0.5) {
my %place_holder = (
Event => "",
Day => $event->{Day},
Time => $place_holder,
Area => $event->{Area},
Length => 0.5
);
push @schedule, \%place_holder;
}
# Advance the "end of the day" if necessary.
$end_of_the_day = $end_time if $end_time > $end_of_the_day;
}
print_time ($start_time, "end") if $found_events_on_this_day;
}
print "
\n" if $found_events_on_this_day;
}
# Finish.
print qq(
Hacked by Jacob Davenport.