XEROX HPGL 2 4 1 HPGL 1 4 By: Christopher Lane (Lane@Sumex-Aim.Stanford.Edu) INTRODUCTION HPGL defines an additional Interlisp-D image stream type that generates output files for plotters (and other output devices) which use the Hewlett-Packard Graphics Language. The package does not define any user functions, the HPGL streams are accessed via OPENIMAGESTREAM and the various window hardcopy functions. The file extensions HPGL and PLOT are recognized by the system as plotter output file types. PLOTTERS Some plotters which use HPGL either as their primary language or as an optional extra: Hewlett-Packard (most) Epson America HI-80 (option) Facit 4551 Western Graphtec MP1000 and FP5301 (option) Gould Color-writer 6120 and 6320 Houston Instrument DMP-29 (option) Taxan 710 Nicolet Zeta 8 (option) IBM 7371 Roland DYX-880 and 980 (source: PC, Volume 4, Number 26, December 84) IMPLEMENTATION The driver was implemented using an HP 7475A plotter; a number of the driver's variables and options may need adjustment for other types of plotters. The plotter driver output conforms to the more restrictive HP 9872 syntax to be more widely applicable. Options The driver accepts the following in the OPTIONS argument to OPENIMAGESTREAM: SCALE Image scaling; value should be a POSITION record which indicates where the second scaling point should be placed (the initial scaling point is at 0,0). By default, uses (SCREENWIDTH . SCREENHEIGHT). ROTATE Paper rotation; value should be 0 or 90, defaults to landscape plotting (0). PAPER Paper size; value is a small integer, the HP 7475A accepts 3 (A3) or 4 ( A4). TERMINATOR Label terminator character; value should be a character, the default is '^A'. VELOCITY Pen velocity; plotter specific. Variables The driver uses the following variables: HPGL.FONTS An ALST of font names and (small integer) plotter font numbers. HPGL.OPTIONS An ALST of plotter specific options that can be passed to OPENIMAGESTREAM and the corresponding HPGL command to print. HPGL.DASHING An ALST of HPGL line types (small integers) and Interlisp-D dashing lists. HPGL.FONT.EXPANSIONS An ALST of font face expansions (REGULAR, COMPRESSED and EXPANDED) and the relative scale of each. HPGL.TERMINATOR The default end of instruction terminator character, initially ';'. HPGL.SEPARATOR The default parameter separator character, initially ','. HPGL.TEXT.TERMINATOR The default end of label terminator character, initially '^A'. HPGL.CHORD.ANGLE The chord angle used by the circle and arc instructions. Defaults to NIL which causes the plotter's default to be used. HPGL.PATTERN.LENGTH The default pattern length for the hardware dashing. Defaults to NIL which causes the plotter's default to be used. COLORNAMES System variable used to convert between RGB triples and pen numbers. The order of entries affects the pen number to color correspondences . Dashing To minimize the complexity of the driver and maximize the speed of the plotting, for image operations other than DRAWLINE, the driver only uses the built-in dashing types of the plotter. The correspondences between the dashing style and HPGL line type number are kept in the HPGL.DASHING variable which can be extended for plotters with different or extended dashing styles. The dashing styles are displayed below: ((SKETCH NIL SKETCHCONTEXT ((ROUND 1 0) (HELVETICA 10) (CENTER BASELINE) (LINE 30.0 12) NIL NIL (CENTER CENTER) (NIL NIL) T NIL NIL 1.0) VERSION 3) ((0.05 13.0 NIL) (TEXT (56.0 . 184.0) ("2") 1.0 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((53.0 180.5 6.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (56.0 . 160.0) ("3") 1.0 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((53.0 156.5 6.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (56.0 . 136.0) ("4") 1.0 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((53.0 132.5 6.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (56.0 . 112.0) ("5") 1.0 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((53.0 108.5 6.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (56.0 . 88.0) ("6") 1.0 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((53.0 84.5 6.0 13.0)) NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 88.0) (320.0 . 88.0)) (ROUND 1 0) NIL (25 5 5 5 5 5) 1.0 NIL NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 112.0) (320.0 . 112.0)) (ROUND 1 0) NIL (35 5 5 5) 1.0 NIL NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 136.0) (320.0 . 136.0)) (ROUND 1 0) NIL (39 5 1 5) 1.0 NIL NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 160.0) (320.0 . 160.0)) (ROUND 1 0) NIL (35 15) 1.0 NIL NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 184.0) (320.0 . 184.0)) (ROUND 1 0) NIL (25) 1.0 NIL NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 64.0) (320.0 . 64.0)) (ROUND 1 0) NIL NIL 1.0 NIL NIL)) ((0.05 13.0 NIL) (TEXT (56.0 . 208.0) ("1") 1.0 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((53.0 204.5 6.0 13.0)) NIL)) ((0.0 124.0 NIL) (WIRE ((72.0 . 208.0) (320.0 . 208.0)) (ROUND 1 0) NIL (1 49) 1.0 NIL NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 208.0) ("(1 49)") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 204.5 36.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 184.0) ("(25)") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 180.5 24.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 160.0) ("(35 15)") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 156.5 42.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 136.0) ("(39 5 1 5)") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 132.5 60.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 112.0) ("(35 5 5 5)") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 108.5 60.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 88.0) ("(25 5 5 5 5 5)") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 84.5 84.0 13.0)) NIL)) ((0.05 13.0 NIL) (TEXT (336.0 . 64.0) ("NIL") 1.0 (LEFT BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((336.0 60.5 18.0 13.0)) NIL))) (53.0 60.5 367.0 157.0) 1.0 8.0 If the driver code is loaded after SKETCH, the dashing types are added to SKETCH's menu of dashing styles. If when using arbitrary dashing styles with the DRAWLINE image operation you notice unnecessary pen movement, try doing (CHANGENAME 'DRAWDASHEDLINE 'RELMOVETO 'NILL), which works around a known bug, and hardcopy the output again.(LIST ((PAGE NIL (PAPERSIZE LETTER STARTINGPAGE# 119) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE NIL . LETTER) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE NIL . LETTER) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL)))))(Č(Č(ŠŠ8(ŠŠ8DČČ PAGEHEADING RUNNINGHEAD TERMINAL MODERN MODERNMODERNMODERN MODERN MODERN MODERNLOGO  HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN 4 ' X!U‹W6;E&  #˙) *= VZ+ )LH/XxTITW0V0™ € V SKIO.GETFN.2MODERN ä/>ˇˆzē