PostScript: Program for Obtaining LaserWriter Information



This article contains a PostScript program for gathering LaserWriter
information.

This PostScript program reports information about the printer, including:

- PostScript version
- available fonts
- virtual memory status
- cache status
- a graphic benchmark.


%!
%% Laser Doctor, Version 1.0.0
%% Written by Jim Sullivan, January, 1989.
%% This was written out of a need to display as much information
%% about various Postscript Laserprinters onto one page. More
%% can be added and anyone is free to modify it for their own
%% needs.

gsave

%% Beginning of definitions ********************************

/HB {/Helvetica-Bold} def
/CBO {/Courier-BoldOblique} def
/C {/Courier} def
/FF {findfont} def
/SS {scalefont setfont} def
/mt {moveto} def
/s {show} def
/fontname 30 string def
/getfont {pop fntnm cvs /fontname exch def} def
/fntnm 30 string def
/str 32 string def
/BOLD {CBO FF 10 SS} def
/NORMAL {C FF 10 SS} def
/cnt 0 def
/btime 0 def
/circleofbench
{ 15 15 345
{gsave
rotate 0 0 mt
(Benchmark) oshow
grestore
} for
} def
/oshow {true charpath stroke} def

%% End of definitions *****************************************

BOLD
200 756 mt
(Analysis by Doctor Laser, Version 1.0.0) s %Print title
20 720 mt
NORMAL (This printer is a ) s
BOLD statusdict/product get str cvs s %Gets the name of the
NORMAL ( running version ) s %printer from
BOLD version str cvs s %statusdict/product
NORMAL ( of Postscript.) s %and the version number
20 700 translate %of Postscript from the
%'version' command
0 0 mt
(Available Fonts : (PaintType)FontName:Example of font) s %Heading
0 -10 mt
(PaintType = 0\\(filled\\), 1\\(stroked\\), 2\\(outlined\\),) s
0 -20 mt
( 3\\(mixed\\), ?\\(unknown\\)) s
0 -30 translate

BOLD
FontDirectory {BOLD 0 0 mt %Push directory of fonts and
getfont %get the fonts one at a time.
(\\() s
{fontname cvn FF /PaintType get str cvs s} stopped {%ifelse
(?) s } {} ifelse %Get the font's PaintType and print its value,
(\\)) s %or if it is not supplied, print a '?'.

fontname s %Print the name of the font.

mark
fontname length 1 30 {(-) s} for %Print dashes out to the font sample
column.
(:) s %Print a colon.

{fontname cvn FF 10 SS ( ABCDEFGH abcdefgh) s } stopped {%ifelse
NORMAL (Error implementing font) s } {} ifelse %Show a sample of each
cleartomark %font. If an error is
cnt 10 add %trapped, print message
/cnt exch def %indicating an error
0 -10 translate} forall %occurred. Use the
NORMAL %variable 'cnt' to count
cnt 30 add /cnt exch def %the number of fonts.

350 cnt mt %Move back up the page 'cnt' points.
(Virtual Memory Status:) s %Print the Virtual Memory Status
0 0 translate %using 'vmstatus'.
370 cnt 20 sub mt
(Maximum Available Bytes = ) s BOLD vmstatus str cvs s NORMAL
370 cnt 30 sub mt
(Bytes currently in use = ) s BOLD str cvs s NORMAL
370 cnt 40 sub mt
(Level of Save Nesting = ) s BOLD str cvs s NORMAL
350 cnt 60 sub mt

(Cache status \\(Red book p126\\):) s %Print out the cache status.
cachestatus
370 cnt 80 sub mt NORMAL (blimit = ) s BOLD str cvs s
370 cnt 90 sub mt NORMAL ( cmax = ) s BOLD str cvs s
370 cnt 100 sub mt NORMAL ( csize = ) s BOLD str cvs s
370 cnt 110 sub mt NORMAL ( mmax = ) s BOLD str cvs s
370 cnt 120 sub mt NORMAL ( msize = ) s BOLD str cvs s
370 cnt 130 sub mt NORMAL ( bmax = ) s BOLD str cvs s
370 cnt 140 sub mt NORMAL ( bsize = ) s BOLD str cvs s

usertime /btime exch def %Print a graphic (circleofbench)
HB FF 12 SS %and time how long it takes for
430 cnt 230 sub translate %the printer to interpret it.
.5 setlinewidth
circleofbench
0 0 moveto
(Benchmark Testing) true charpath
gsave 1 setgray fill grestore
stroke
-40 -80 mt
NORMAL
(Time to print) s
-40 -90 mt
(the above graphic) s
-40 -100 mt
(was ) s
BOLD
usertime btime sub 0.001 mul str cvs s %Print out the time in seconds.
NORMAL
( seconds.) s
grestore
showpage



Published Date: Feb 18, 2012