#!/usr/bin/perl # Database Report Generator # By Brian Prentice October 1996 read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $form{$name} = $value; } $database = $form{"database"}; @header = split(/,/, $form{"headers"}); $noFields = $#header; $sortOption = $form{"sorting"}; $sortOption =~ s/(\d+)/-k$1,$1/g; $sortOption .= " -t \'\t\'"; $options = $form{"options"}; $caseSensitive = ! ($options =~ "case insensitive"); $recordNo = $options =~ "record numbers"; foreach $i (0..$noFields) { $patterns[$i] = $form{"pattern" . ($i + 1)}; $conditions[$i] = $form{"condition" . ($i + 1)}; $conditions[$i] =~ s/[vV]/\$fields\[\$i\]/g; $j = $form{"position" . ($i + 1)}; if (($j > 0) && ($j <= ($#header + 1))) { $positions[$j - 1] = $i; } } $noDisplayFields = $#positions; print "Content-type: text/html\n\n"; print "\n"; print "Database Report\n"; print "\n"; print "

Database Report

\n"; if (open(FILE, "sort $sortOption < $database |")) { print "\n"; print "\n"; if ($recordNo) { print "\n"; } foreach $i (0..$noDisplayFields) { print "\n"; } print "\n"; $rn = 1; @records = ; foreach $record (@records) { @fields = split(/\t/, $record); $cond = 1; foreach $i (0..$noFields) { if ($patterns[$i]) { if ($caseSensitive) { $cond &= $fields[$i] =~ /$patterns[$i]/; } else { $cond &= $fields[$i] =~ /$patterns[$i]/i; } } if ($conditions[$i]) { $cond &= eval($conditions[$i]); } } if ($cond) { print "\n"; if ($recordNo) { print "\n"; } foreach $i (0..$noDisplayFields) { print "\n"; } print "\n"; $rn++; } } print "
No", $header[$positions[$i]], "
", $rn, "", $fields[$positions[$i]], "
\n"; } else { print "Can't read file: $database\n"; } print "\n"; exit(0);