#!/usr/bin/perl # This is a CGI script which takes the input from the simple survey submitted in # survey.html. The user's intended languages and operating systems are stored in # simple comma separated value files. use CGI; $q = new CGI; # Start the response web page print "Content-type:text/html\n\n"; print <SWIG Survey Submission

SWIG Survey Submission
EndHTML # Extract all the variables out of the response $remoteHost = $ENV{'REMOTE_HOST'}; $remoteAddr = $ENV{'REMOTE_ADDR'}; $ipAddress = ($remoteHost == '') ? $remoteAddr : $remoteHost; $langChicken = $q->param('langChicken'); $langCSharp = $q->param('langCSharp'); $langGuile = $q->param('langGuile'); $langJava = $q->param('langJava'); $langMzscheme = $q->param('langMzscheme'); $langOcaml = $q->param('langOcaml'); $langPerl = $q->param('langPerl'); $langPhp = $q->param('langPhp'); $langPike = $q->param('langPike'); $langPython = $q->param('langPython'); $langRuby = $q->param('langRuby'); $langSexp = $q->param('langSexp'); $langTcl = $q->param('langTcl'); $langXml = $q->param('langXml'); $langSpareLang1 = $q->param('langSpareLang1'); $langSpareLang2 = $q->param('langSpareLang2'); $langSpareLang3 = $q->param('langSpareLang3'); $langOtherLang = $q->param('langOtherLang'); $namedLanguage = $q->param('namedLanguage'); $osBSD = $q->param('osBSD'); $osHPUX = $q->param('osHPUX'); $osLinux = $q->param('osLinux'); $osMacOSX = $q->param('osMacOSX'); $osSolaris = $q->param('osSolaris'); $osWindows = $q->param('osWindows'); $osOtherOS = $q->param('osOtherOS'); $namedOS = $q->param('namedOS'); # Get log date ($seconds, $minutes, $hours, $day_of_month, $month, $year, $wday, $yday, $isdst) = gmtime; $logDate = sprintf("%04d/%02d/%02d %02d:%02d", $year+1900, $month+1, $day_of_month, $hours, $minutes); # Create new file each month $fileName = sprintf("../survey/swigsurvey-%04d-%02d.csv", $year+1900, $month+1); if (!-e $fileName) { create_file($fileName); } # Open file for appending and lock it to prevent concurrent access open(fileOUT, ">>$fileName") or construct_thankyou_page_and_exit(); # We can't log the info if we can't open the file, quietly give up. flock(fileOUT, 2); seek(fileOUT, 0, 2); # Dump all the surveyed data to file in comma separated value (CSV) format print fileOUT "$logDate,$ipAddress,"; print fileOUT "$langChicken,$langCSharp,$langGuile,$langJava,$langMzscheme,$langOcaml,$langPerl,$langPhp,$langPike,$langPython,$langRuby,$langSexp,$langTcl,$langXml,$langSpareLang1,$langSpareLang2,$langSpareLang3,$langOtherLang,$namedLanguage,"; print fileOUT "$osBSD,$osHPUX,$osLinux,$osMacOSX,$osSolaris,$osWindows,$osSpareOS1,$osSpareOS2,$osSpareOS3,$osOtherOS,$namedOS"; print fileOUT "\n"; close(fileOUT); # Create html page response construct_thankyou_page_and_exit(); sub create_file($) { my($fileToCreate) = @_; open(fileOUT, ">$fileToCreate") or construct_thankyou_page_and_exit(); # We can't log the info if we can't create the file, quietly give up. # Generate field heading names print fileOUT "LogDate,IPAddress,"; print fileOUT "Chicken,CSharp,Guile,Java,Mzscheme,Ocaml,Perl,Php,Pike,Python,Ruby,Sexp,Tcl,Xml,SpareLang1,SpareLang2,SpareLang3,OtherLang,NamedLanguage,"; print fileOUT "BSD,HPUX,Linux,MacOSX,Solaris,Windows,SpareOS1,SpareOS2,SpareOS3,OtherOS,NamedOS"; print fileOUT "\n"; } sub construct_thankyou_page_and_exit { print <Download area or return to the SWIG home page. EndHTML exit; }