jim@nih-csl.UUCP (jim sullivan) (02/09/89)
Here is a postscript routine I've written called Laser Doctor. I want to thank all those who sent me ideas to include in it, they were most helpful. This program, when sent to a postscript printer, will printout one page with the following information. The printer name The version of postscript being used All fonts The painttype of each font (filled, stroked, etc...) An example of each font (some fonts, from wordprocessor software and other software, will cause an error whan selected. In this program, these errors are trapped and an 'error implementing font' is printed.) The status of virtual memory The status of cache memory A benchmark test (Time to print a graphic. This can be used to measure the relative speeds of printers.) There is room for improvement and additional features so if you make a significant improvement, please share it with the net. Some features which were suggested I did not add, such as checking the status of the attached disk drives, since we do not have any on our printers. This was tested on an Apple LaserWriter II and a TI Omnilaser 2115. Enjoy! ------------------------------------ cut here ------------------------- %! %% 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 20 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 --------------------------------- cut here ---------------------------------- Jim jim@alw.nih.gov