1 #!/usr/bin/perl -w
 2 # File: chat_board.pl
 3 # Author: unknown
 4 # Location: http://www.thelug.org/docs/
 5 # Description: This perl script is a simple
 6 # message board.  It would be run from a web
 7 # server through a CGI parser.
 8 
 9 use 5.004;
10 use strict;
11 use CGI qw(:standard);
12 use Fcntl qw(:flock);
13 
14 sub bail {
15     my $error = "@_";
16     print h1("Unexpected Error"), p($error), end_html;
17     die $error;
18 }
19 
20 my(
21     $CHATNAME,
22     $MAXSAVE,
23     $TITLE,
24     $cur,
25     @entries,
26     $entry,
27 );
28 
29 $TITLE = "Message Board v0.01a - Tom Large";
30 $CHATNAME = "./chat_board.txt";
31 $MAXSAVE = 50;
32 
33 print header, start_html($TITLE);
34 print ('<p align=center><img src="/cfs/logo.jpg"></p>');
35 print ('<body bgcolor=black text=white link=3379DC vlink=97CCFF>');
36 print ('<a href="/cfs/cfs.html">CFS HQ</a>');
37 
38 $cur = CGI->new();
39 if ($cur->param("message")) {
40     $cur->param("date", scalar localtime);
41  @entries = ($cur);
42 }
43 
44 open(CHANDLE, "+< $CHATNAME") || bail("cannot open $CHATNAME: $!");
45 
46 flock(CHANDLE, LOCK_EX) || bail("cannot flock $CHATNAME: $!");
47 
48 while (!eof(CHANDLE) && @entries < $MAXSAVE) {
49     $entry = CGI->new(\*CHANDLE);
50     push @entries, $entry;
51 }
52 seek(CHANDLE, 0, 0) || bail("cannot rewind $CHATNAME: $!");
53 foreach $entry (@entries) {
54     $entry->save(\*CHANDLE);
55 }
56 truncate(CHANDLE, tell(CHANDLE)) || 
57                                  bail("cannot truncate $CHATNAME: $!");
58 close(CHANDLE) || bail("cannot close $CHATNAME: $!");
59 
60 print hr, start_form;
61 print p("Your name my liege :", $cur->textfield(
62     -NAME => "name"));
63 print p("Speak :", $cur->textfield(
64     -NAME => "message",
65     -OVERRIDE => 1,
66     -SIZE => 50));
67 print p(submit("So let it be written\!"), reset("Uh\, no\.  Try again\."));
68 print end_form, hr;
69 
70 print h2("Prior Ravings:");
71 foreach $entry (@entries) {
72     print hr;
73     printf("<B>Posted by:</B>  <I>%s</I><BR><BR><B>Date:</B>  <I>%s</I><BR><BR><BR><B>Message</B>:<BR><I>%s</I>",
74     $entry->param("name"),
75     $entry->param("date"),
76     $entry->param("message"));
77     print ('<BR>');
78     print br();
79 }
80 print hr;
81 print end_html;


syntax highlighted by Code2HTML, v. 0.9.1