+ \@texts_metr, $gap_width, $colgap_width, \@core_size,
+ \@item_size, \@eff_paper_size,
+ $lp_y);
+}
+
+sub prf { printf @_ or die $!; }
+
+sub write_output_tile ($) {
+ my ($tile_string_off) = @_;
+ my @cnr;
+ my $c;
+ for ($cnr[0]=0; $cnr[0]<2; $cnr[0]++) {
+ for ($cnr[1]=0; $cnr[1]<2; $cnr[1]++) {
+ foreach my $cnrc (qw(0 1)) {
+ prf "newpath ";
+ prf "%s ", $cnr[$_] ? $paperpts[$_] : 0 foreach qw(0 1);
+ prf "moveto ";
+ prf "%s ", ($cnrc!=$_ ? 0 : $cnr[$_] ? -1 : +1) * $borders[$_]
+ foreach qw(0 1);
+ prf "rlineto stroke\n";
+ }
+ }
+ }
+ prf "%s ", $borders[$_] foreach qw(0 1);
+ prf "translate\n";
+ if ($lp_y->{rotate_paper}) {
+ prf "90 rotate\n";
+ prf "0 %s translate\n", -$eff_paper_size[1];
+ }
+ my $rows = ceil($pertile / $lp_y->{0});
+ my @cell_size;
+
+ $cell_size[0] = ($eff_paper_size[0] + $colgap_width) / $lp_y->{0};
+ $cell_size[1] = ($eff_paper_size[1] +
+ (defined $domain_suffix ? -$domain_vsize : 0)
+ ) / $rows;
+
+ prf "/rightadjust { dup stringwidth pop neg 0 rmoveto } bind def\n";
+
+ foreach my $nums (qw(1 0)) {
+ prf("%s findfont %s scalefont setfont\n",
+ psstring($nums ? $fontname_num : $fontname),
+ ($nums ? $fontscale_num : 1.0) * $lp_y->{f});
+ prf "%s setlinewidth\n", $gap_width * 0.1;
+ print DEBUG "nums? $nums rows=$rows\n";
+ foreach my $col (0..$lp_y->{0}-1) {
+ my $col_lhs = $cell_size[0] * $col;
+ if ($col > 0 && $nums) {
+ prf "newpath %s ", $col_lhs - $colgap_width*0.5;
+ prf "%s moveto ", $eff_paper_size[1];
+ prf "0 %s rlineto ", -$cell_size[1] * $rows;
+ prf "stroke\n";
+ }
+ foreach my $row (0..$rows-1) {
+ my $se = $strings[$col*$rows + $row + $tile_string_off];
+ next unless $se;
+ prf "newpath ";
+ prf "%s ", $col_lhs
+ + ($nums ? $numbers_metr[4]
+ : $numbers_metr[4] + $gap_width);
+ prf "%s ", $eff_paper_size[1] - $cell_size[1] * $row
+ - $core_size[1];
+ prf "moveto %s ", psstring($se->[!$nums]);
+ if ($nums) {
+ prf "rightadjust ";
+ }
+# prf " gsave 10 10 rlineto stroke grestore\n";
+ prf "show\n";
+ }
+ }
+ if (!$nums) {
+ if (defined $domain_suffix) {
+ prf "%s 0 moveto", $eff_paper_size[0];
+ prf "%s ", psstring($domain_suffix);
+ prf "rightadjust show\n";
+ }
+ }
+ }
+}
+
+sub write_output () {
+ prf "%%!\n";
+ my @tile;
+ for ($tile[0]=0; $tile[0]<$tiles[0]; $tile[0]++) {
+ for ($tile[1]=0; $tile[1]<$tiles[1]; $tile[1]++) {
+ prf "%% tile @tile\n";
+ prf "gsave\n";
+ prf "%s ", $tile[$_] * $paperpts[$_] foreach qw(0 1);
+ prf "translate\n";
+ write_output_tile($tile[0] * $pertile +
+ $tile[1] * $pertile * $tiles[0]);
+ prf "grestore\n";
+ }
+ }