Index: trunk/bin/equip_request.txt
===================================================================
--- trunk/bin/equip_request.txt	(revision 1)
+++ trunk/bin/equip_request.txt	(revision 1)
@@ -0,0 +1,56 @@
+# field formats
+# name |label [hint] :type =default {value[display string],value[display string]...} //validate
+# name|label[hint]:type=default@list//validate
+# name[size]//validate
+# name@list
+
+# define option lists
+!list DEPARTMENTS {
+  AMST[American Studies],
+  LING[Linguistics],
+  PHIL[Philosophy],
+  other,
+  none,
+}
+!list BUILDINGS {
+    JMZ[Jimenez],
+    KEY[Francis Scott Key],
+    LEF[LeFrak Building],
+    MMH[Marie Mount Hall],
+    SKN[Skinner],
+    TLF[Taliafero],
+    TWS[Tawes],
+    WDS[Woods Hall],
+}
+!list YES_NO { yes[I agree], no[I disagree], maybe[I am undecided] }
+!list EQUIPMENT {
+    computer[Computer],
+    vcr[VCR],
+    dvd[DVD Player],
+    projector[LCD Projector],
+}
+!list EXTRA_EQUIPMENT {
+    internet[Internet],
+    zip_drive[ZIP Drive],
+    floppy_disk[Floppy],
+}
+
+!title Equipment Request Form
+!author the Classroom Support Pilot Project
+
+name[40]//VALUE
+course_number[20]//HIST
+extension[20][e.g. x51234]//EXT
+email[40]|Email address[e.g. name@host.domain]//EMAIL
+building=SKN@BUILDINGS//VALUE
+room_number[20]//VALUE
+
+dept|Department: select = PHIL{ AMST[American Studies], LING[Linguistics], PHIL[Philosophy], none }
+
+equip|I need a: checkbox @EQUIPMENT
+computer_type|Preferred computer type:radio{pc[Windows],mac[Mac]}
+extra_equip|I would also like: checkbox @EXTRA_EQUIPMENT
+purpose|This equipment will be used for { lecture[A lecture], students[Student presentations], guest[A guest speaker]}
+special_needs[8,60]|Additional requests or instructions:textarea
+on_time|I recieved my equipment promptly: radio =maybe@YES_NO
+recommend|I would recommend this service to others: radio =maybe@YES_NO
Index: trunk/bin/fb-cgi.pl
===================================================================
--- trunk/bin/fb-cgi.pl	(revision 1)
+++ trunk/bin/fb-cgi.pl	(revision 1)
@@ -0,0 +1,36 @@
+use strict;
+use warnings;
+
+use Text::FormBuilder;
+use CGI;
+
+my $q = CGI->new;
+
+my $src_file = get_src_file($q->param('form_id'));
+
+my $parser = Text::FormBuilder->new;
+my $form = $parser->parse($src_file)->build(method => 'POST', params => $q)->form;
+
+if ($form->submitted && $form->validate) {
+    # TODO:
+    # call storage function
+    my $plugin = 'DumpParams';
+    eval "use $plugin;";
+    
+    if ($plugin->process($q)) {
+        # show thank you page
+        #print $q->header('text/plain');
+        #print "Thank you for your input!\n"
+    } else {
+        # there was an error processing the results
+    }
+    
+} else {
+    print $q->header;
+    print $form->render;
+}
+
+sub get_src_file {
+    my $form_id = shift;
+    return "$form_id.txt";
+}
Index: trunk/bin/fb.pl
===================================================================
--- trunk/bin/fb.pl	(revision 97)
+++ trunk/bin/fb.pl	(revision 1)
@@ -1,3 +1,2 @@
-#!/usr/bin/perl -w
 use strict;
 use warnings;
@@ -12,6 +11,5 @@
 my $src_file = shift;
 
-create_form($src_file, \%fb_options, $outfile);
-#Text::FormBuilder->parse($src_file)->build(%fb_options)->write($outfile);
+Text::FormBuilder->parse($src_file)->build(%fb_options)->write($outfile);
 
 =head1 NAME
@@ -25,18 +23,9 @@
     $ fb my_form.txt -o my_form.html -D action=/cgi-bin/my-script.pl
 
-=head1 DESCRIPTION
-
-Parses a formspec file from the command line and creates an output
-file. The sort of output file depends on the value given to the C<-o>
-option. If it ends in F<.pm>, a standalone module is created. If it
-ends in F<.pl> or F<.cgi>, a skeleton CGI script is created. Any other
-value, will be taken as the name of an HTML file to write. Finally, if
-not C<-o> option is given then the HTML will be written to STDOUT.
-
 =head1 OPTIONS
 
 =over
 
-=item C<< -D <parameter>=<value> >>
+=item -D <parameter>=<value>
 
 Define options that are passed to the CGI::FormBuilder object. For example,
@@ -46,28 +35,3 @@
     $ fb ... -D action=/cgi-bin/some_script.pl
 
-=item C<< -o <output file> >>
-
-Where to write output, and what form to write it in. See C<create_form> in 
-L<Text::FormBuilder> for a more detailed explanation.
-
-    # write a standalone module
-    $ fb myform -o MyForm.pm
-    
-    # write a CGI script
-    $ fb myform -o form.cgi
-    $ fb myform -o form.pl
-
-=back
-
-=head1 AUTHOR
-
-Peter Eichman, C<< <peichman@cpan.org> >>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright E<copy>2004 by Peter Eichman.
-
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
+=item -o <output file>
Index: trunk/bin/form.html
===================================================================
--- trunk/bin/form.html	(revision 1)
+++ trunk/bin/form.html	(revision 1)
@@ -0,0 +1,42 @@
+
+<html>
+<head>
+  <title>Equipment Request Form - The Classroom Support Pilot Project</title>
+  <style type="text/css">
+    #author, #footer { font-style: italic; }
+    th { font-weight: normal; text-align: right; vertical-align: top; }
+  </style>
+</head>
+<body>
+
+<h1>Equipment Request Form</h1>
+<p id="author">Created by the Classroom Support Pilot Project</p>
+<p id="instructions">(Required fields are marked in <strong>bold</strong>.)</p>
+
+<!-- Generated by CGI::FormBuilder v2.12 available from www.formbuilder.org -->
+<form action="form.html" method="GET"><input name="_submitted" type="hidden" value="1" /><input name="_sessionid" type="hidden" value="" />
+<table>
+  <tr><th><strong class="required">Name:</strong></th><td><input name="name" size="40" type="text" /> </td></tr>
+  <tr><th><strong class="required">Course Number:</strong></th><td><input name="course_number" size="20" type="text" /> </td></tr>
+  <tr><th><strong class="required">Extension:</strong></th><td><input name="extension" size="20" type="text" /> e.g. x51234</td></tr>
+  <tr><th><strong class="required">Email address:</strong></th><td><input name="email" size="40" type="text" /> e.g. name@host.domain</td></tr>
+  <tr><th><strong class="required">Building:</strong></th><td><select name="building" type="select"><option value="">-select-</option><option value="JMZ">Jimenez</option><option value="KEY">Francis Scott Key</option><option value="LEF">LeFrak Building</option><option value="MMH">Marie Mount Hall</option><option selected="selected" value="SKN">Skinner</option><option value="TLF">Taliafero</option><option value="TWS">Tawes</option><option value="WDS">Woods Hall</option></select> </td></tr>
+  <tr><th><strong class="required">Room Number:</strong></th><td><input name="room_number" size="20" type="text" /> </td></tr>
+  <tr><th>Department:</th><td><select name="dept" type="select"><option value="">-select-</option><option value="AMST">American Studies</option><option value="LING">Linguistics</option><option selected="selected" value="PHIL">Philosophy</option><option value="none">none</option></select> </td></tr>
+  <tr><th>I need a:</th><td><input id="equip_computer" name="equip" type="checkbox" value="computer" /> <label for="equip_computer">Computer</label> <input id="equip_vcr" name="equip" type="checkbox" value="vcr" /> <label for="equip_vcr">VCR</label> <input id="equip_dvd" name="equip" type="checkbox" value="dvd" /> <label for="equip_dvd">DVD Player</label> <input id="equip_projector" name="equip" type="checkbox" value="projector" /> <label for="equip_projector">LCD Projector</label>  </td></tr>
+  <tr><th>Preferred computer type:</th><td><input id="computer_type_pc" name="computer_type" type="radio" value="pc" /> <label for="computer_type_pc">Windows</label> <input id="computer_type_mac" name="computer_type" type="radio" value="mac" /> <label for="computer_type_mac">Mac</label>  </td></tr>
+  <tr><th>I would also like:</th><td><input id="extra_equip_internet" name="extra_equip" type="checkbox" value="internet" /> <label for="extra_equip_internet">Internet</label> <input id="extra_equip_zip_drive" name="extra_equip" type="checkbox" value="zip_drive" /> <label for="extra_equip_zip_drive">ZIP Drive</label> <input id="extra_equip_floppy_disk" name="extra_equip" type="checkbox" value="floppy_disk" /> <label for="extra_equip_floppy_disk">Floppy</label>  </td></tr>
+  <tr><th>This equipment will be used for :</th><td><input id="purpose_lecture" name="purpose" type="radio" value="lecture" /> <label for="purpose_lecture">A lecture</label> <input id="purpose_students" name="purpose" type="radio" value="students" /> <label for="purpose_students">Student presentations</label> <input id="purpose_guest" name="purpose" type="radio" value="guest" /> <label for="purpose_guest">A guest speaker</label>  </td></tr>
+  <tr><th>Additional requests or instructions:</th><td><textarea cols="60" name="special_needs" rows="8" type="textarea"></textarea> </td></tr>
+  <tr><th>I recieved my equipment promptly:</th><td><input id="on_time_yes" name="on_time" type="radio" value="yes" /> <label for="on_time_yes">I agree</label> <input id="on_time_no" name="on_time" type="radio" value="no" /> <label for="on_time_no">I disagree</label> <input checked="checked" id="on_time_maybe" name="on_time" type="radio" value="maybe" /> <label for="on_time_maybe">I am undecided</label>  </td></tr>
+  <tr><th>I would recommend this service to others:</th><td><input id="recommend_yes" name="recommend" type="radio" value="yes" /> <label for="recommend_yes">I agree</label> <input id="recommend_no" name="recommend" type="radio" value="no" /> <label for="recommend_no">I disagree</label> <input checked="checked" id="recommend_maybe" name="recommend" type="radio" value="maybe" /> <label for="recommend_maybe">I am undecided</label>  </td></tr>
+
+  <tr><th></th><td style="padding-top: 1em;"><input name="_submit" type="submit" value="Submit" /></td></tr>
+</table>
+</form>
+<hr />
+<div id="footer">
+  <p id="creator">Made with <a href="http://formbuilder.org/">CGI::FormBuilder</a> version 2.12.</p>
+</div>
+</body>
+</html>
