The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl
use strict;
use Data::Reporter;
use Data::Reporter::RepFormat;
use Data::Reporter::Filesource;

use vars qw ($totxdep $totxsex $nemp $totgral);

sub HEADER($$$$) { 
	my ($report, $sheet, $rep_actline, $rep_lastline) = @_;

	$sheet->MVPrint(0, 0,"-" x 70);
	$sheet->Move(0,1);
	$sheet->PrintC("Example using an ascii plain file");
	$sheet->MVPrint(60, 1,$report->date(1));
	$sheet->MVPrint(16, 2,"Information from file example2.dat");
	$sheet->MVPrint(0, 3,$report->time(1));
	$sheet->MVPrint(60, 3,"PAG : ".$report->page(1));
	$sheet->MVPrint(0, 4,"-" x 70);
}

sub TITLE($$$$) { 
	my ($report, $sheet, $rep_actline, $rep_lastline) = @_;
	$sheet->MVPrint(8, 0,"Name          Department     Telephone     Sex     Salary");
	$sheet->MVPrint(0, 1,"------------------- -------------- -------------- ----- --------------");
}

sub DETAIL($$$$) { 
	my ($report, $sheet, $rep_actline, $rep_lastline) = @_;
	$sheet->MVPrint(0, 0, sprintf("%-20s", $rep_actline->[0]));
	$sheet->MVPrint(21, 0,$rep_actline->[3]);
	$sheet->MVPrintP(36, 0,$rep_actline->[2], "xx-xx-xx-xx");
	$sheet->MVPrintP(56, 0,$rep_actline->[4], '$$$,$$$,999.99');
	$sheet->MVPrintP(51, 0, $rep_actline->[1], " x ");
	$totxsex += $rep_actline->[4];
	$nemp++;
}

sub init_vars() {
	$totxdep    = 0.0;
	$totxsex    = 0.0;
	$nemp       = 0;
	$totgral    = 0.0;
}

sub FINAL($$$$) { 
	my ($report, $sheet, $rep_actline, $rep_lastline) = @_;
	$sheet->MVPrint(0, 1,"Grand Total : ");
	$sheet->MVPrintP(14, 1,$totgral, '$$$,$$$,999.99');
	$sheet->MVPrint(0, 2,"End of Report");
}

sub BREAK_1($$$$) { 
	my ($report, $sheet, $rep_actline, $rep_lastline) = @_;
	my $sex = "Male";
	$sex = "Female" if ($rep_actline->[1] eq "F");
	$sheet->MVPrint(0, 1,"Department");
	$sheet->MVPrint(0, 2,"Number of ");
	$sheet->MVPrint(10, 2,$sex);
	$sheet->MVPrintP(50, 2,$totxsex, '$$$,$$$,999.99');
	$sheet->MVPrint(23, 2,$nemp);
	$sheet->MVPrint(42, 2,"Total : ");
	$totxdep += $totxsex;
	$nemp     = 0;
	$totxsex  = 0.0;
}

sub BREAK_2($$$$) { 
	my ($report, $sheet, $rep_actline, $rep_lastline) = @_;
	$sheet->MVPrint(44, 1,"= ");
	$sheet->MVPrint(0, 1,"Total from Department ");
	$sheet->MVPrintP(46, 1,$totxdep, '$$$,$$$,999.99');
	$sheet->MVPrint(22, 1,$rep_actline->[3]);
	$totgral += $totxdep;
	$totxdep  = 0;
	$report->newpage() unless ($report->eOR());
}

#main
{
	my %rep_breaks = ();
	$rep_breaks{1} = \&BREAK_1;
	$rep_breaks{3} = \&BREAK_2;
	my $source = new Data::Reporter::Filesource(File => "example2.dat");
	my $report = new Data::Reporter();
	$report->configure(
		Width	=> 70,
		Height	=> 66,
		SubFinal 	=> \&FINAL,
		Breaks	=> \%rep_breaks,
		SubHeader	=> \&HEADER,
		SubTitle	=> \&TITLE,
		SubDetail	=> \&DETAIL,
		Source	=> $source,
		File_name	=> "example4.out"
	);
	$report->generate();
}