$o;
}
+sub tile {
+ my $pos = 0;
+ my $o = '';
+ my $showpage = sub {
+ $o .= <<END;
+showpage
+END
+ };
+ while (my $d = shift @_) {
+ if ($pos >= 5) {
+ $pos -= 5;
+ $showpage->();
+ }
+ $o .= <<END;
+gsave
+END
+ if ($pos < 3) {
+ $o .= <<END
+ 0 th 10 add $pos mul translate
+END
+ } else {
+ $o .= <<END
+tw 2 mul 7 add
+ dup th add 0 translate
+ 90 rotate
+ $pos 3 sub mul 0 translate
+END
+ }
+ $o .= "\n".$d."\n";
+ $o .= <<END;
+grestore
+END
+ $pos++;
+ }
+ $showpage->();
+ $o;
+}
+
print <<END or die $!;
%!
/costfont /Heletica-BoldOblique findfont costtextsz scalefont def
/rubysz 4 def
-
-gsave
-END
-
-print green_book() or die $!;
-
-print <<END,green_book() or die $!;
-grestore
-gsave
-tw 2 mul th add 7 add 0 translate
-90 rotate
END
-print <<END,green_book() or die $!;
-grestore
-gsave
-0 th 10 add 2 mul translate
-END
-
-print <<END or die $!;
-grestore
-END
+print tile(
+ green_book(),
+ green_book(),
+ green_book(),
+ green_book(),
+ green_book(),
+ ) or die $! if 1;