HVPLOT V01 Fortran-compatible library for the joint operation of HP-GL plotters & REGIS Graphics Terminals Dr R N Caffin and S L Hewett CSIRO Div of Textile Physics 338 Blaxland Rd. RYDE 2112 N S W Australia HVPLOT CONTENTS Introduction 1 HVPLOT Routines 2 Number Formats 4 Installation 5 Control Subroutines 6 Init 6 Ploff 6 Plon 7 Restor 7 Scale 8 Select 8 Plotting Subroutines 9 Axis 9 Dir 9 Dirrel 9 Draw 10 Home 10 Jmpch 10 Jump 10 Label 11 LabelA 11 LabelN 11 LabeXY 11 Point 11 Send 12 Size 12 Text 12 Error and Digitising Subroutines 13 Check 13 Digitz 13 Pread(n) 14 Sundry Subroutines 15 PenDn 15 PenUp 15 SetCA 15 SetCS 15 SetIP 15 SetIW 16 SetLT 16 SetLTS 16 SetSA 16 SetSL 16 SetSM 17 SetSR 17 SetSS 17 SetTL 17 SetVS 17 VTclr 18 Scl 18 Pick 18 Tick 18 ATick 18 HVPLOT INTRODUCTION This library of routines has been designed as an integrated whole to provide a user with a REGIS graphics terminal and/or an HP-GL plotter with a single Fortran-compatible graphics package. Suitable terminals include the VT125, VT240, VT241 and their emula- tors. Suitable plotters include the HP7470A, HP7475A, HP7550, HP7580B, HP7585B and the DEC LVP16 (with a strange resemblance to the HP7475A). The HVPLOT package allows the user to use the same calls for the two devices for most of the common operations such as setting up scale factors, drawing lines and labelling, with a runtime choice as to which output device shall be actually used. Naturally, each device has some calls which are peculiar to it: these calls have no effect when used for the other device. Regrettably, this package probably bears little relation to any other standard graphics language. There are a number of rea- sons for this: many of the standards are archaic (eg Calcomp), others are incredibly complex (eg CORE and GKS), while others are just not known to the authors. The result is a simple set of com- mands which we found useful. Two other libraries can be made from HVPLOT, to cater for just the HP-GL plotters or for the REGIS terminals. They are made by editing the redundant parts of the modules out prior to compila- tion. The advantage of using one of these packages in place of HVPLOT is solely one of memory and disk space. As this is the first full release of the package, there are bound to be errors in the software and the documentation. Neither the authors, CSIRO or DECUS can accept any responsibility for the use of this software or any consequences. However, the authors would appreciate being informed of any bugs found and of suggested enhancements, (especially if the code/text is provided!), and will try to acknowledge all such contributions. HVPLOT Page 2 HVPLOT ROUTINES The routines available are listed below, with a very brief description of each. The chapter on number formats should be con- sulted for information on the parameter values. As a quick guide, most calls use floating point variables. In either case, the For- tran convention regarding Implicit Integer (I-N) is observed. The chapter on installation should be consulted at the obvious time. Far more routines apply to the plotters than to the terminals: this appears to reflect the difference in intelligence and resolu- tion between the two devices. However, the terminals possess a clear speed advantage. Try putting the plot on the terminal until you are happy with the general appearance, then put it on the plotter. CONTROL INIT To choose (at run time) and initialise the plot device. PLOFF To turn the device off temporarily PLON To turn the device back on after a PLOFF RESTOR Restore system to default state SCALE(Xmin,Xmax,Ymin,Ymax) Declare X and Y scales SELECT(I) Select a pen (on plotter) DEVSWT(string) To optionally switch to the other device. PLOTTING AXIS(X0,Y0,Xtick,Ytick) Draw axes at (X0,Y0) and ticks at *tick DIR(Degree) Define individual character rotation DIRREL(Degree) Define ind. char. rotation relative to P1, P2 DRAW(X,Y) Enable writing and draw a line to (X,Y) HOME Go to BLHC and unload pen if plotter JMPCH(Cx,Cy) To jump a distance defined by char. size JUMP(X,Y) Disable writing and jump to (X,Y) LABEL(String) Write text at current position LABELA(char) Write char (byte) from alternate char set. See also SETCA,CS,SA,SS LABELN(N) Write integer in minimum format LABEXY(X,Y,Scale,Degree,String) To label the x or y axis PENDN Enable writing PENUP Disable writing POINT(X,Y) To plot a point at (X,Y) SEND(String) To send an arbitrary string to a device SIZE(Width,Height) Define character scale TEXT(X,Y,Scale,Degree,String) Put text at (X,Y), to scale and slope HVPLOT Page 3 ERROR CHECKING and DIGITISING (Plotter Specific) CHECK Interrogate plotter for error code, if any (plotter only) DIGITZ Obtain from the plotter the current position PREAD1 Read a single integer from the plotter PREAD2 Read a pair of integers from the plotter PREAD3 Read three integers from the plotter PREAD4 Read four integers from the plotter SUNDRY (Plotter Specific) SETCA(N) Define alternate char. set SETCS(N) Define standard char. set SETIP(IX1,IY1,IX2,IY2) Redefine the registration points SETIW(Xll,Yll,Xur,Yur) Define a window (Lower Left, Upper Right) SETLT(Npatn,Patln) Define line type and dash lengths SETLTS Reset line type to continuous SETSA Select alternate char. set SETSL(Slope) Define character slope SETSM(Char) Define char. to be drawn at each point SETSR(Width,Height) Define relative character size SETSS Select standard char. set SETTL(Tplus,Tminus) Define tick lengths, plus and minus SETVS(Speed) Define pen speed (VT125 Specific) VTCLR Disable and clear the VT125 graphics screen SCL(xx,yy,x,y) To scale from user to VT125 unit PICK(ii,n) Move n pixels in direction ii TICK(ii,n) Draw n pixels in direction ii ATICK(flag) To draw a tick on axis at current position HVPLOT Page 4 NUMBER FORMATS The HP-GL plotters will accept either floating point or integer data for most commands, while converting internally to a special format. They can also be programmed to scale incoming data over a wide range. The REGIS terminals operate internally in terms of pixels, and hence in integer, but they too can accept floating point data. Thus most routines have been written to expect REAL*4 data. Scaling for the REGIS terminals has been enabled by putting it in the software: thus screen formats should be similar for both devices when given the same parameters. However, some vertical compression will be noticed with the REGIS terminals as a result of the 2:1 raster interlace. It should be noted that the plotters usually offer only a res- tricted range for the incoming data. The HP7470A plotter, for instance, will accept floating point numbers in the range -32768.00 to +32767.99 and integers in the same range. Some floating point or integer numbers can only be accepted in the more limited range -128.0 to +127.99. Plotting may be done in device units, but it is usually more convenient to scale the device to the user's range of data. For further details, you should consult the manual for your plotter. The plotter scaling expects floating point numbers for the maxima and minima, but truncates these to integers internally before scaling. Thus it requires a minimum horizontal and vertical full-scale scale of 1.0 to avoid truncation to zero. It also requires a maximum of 64k, obviously. Exceeding these values may have unfortunate results. The terminal scaling is done by the software: the normal Fortran limits apply. Both devices allow the concept of a plot window, but the effect is slightly different in the two cases. Usually, a plotter can be programmed to regard any subset of the legal 2-D coordinate space as the current visible plotting window. Data outside this area is not plotted, although it does not cause an error. The plotter manual should be consulted for further details. The VT125 on the other hand has a 768x480 visible pixel window onto a stor- able 768x512 pixel space, and this visible window, or viewing space, can be moved after the data has been sent to the terminal. It should be noted however that there is a 2:1 mapping in the vert- ical: there are really only 240 distinct vertical pixels. (And the manual is more confusing!). The plot window is currently only implemented for the plotters. HVPLOT Page 5 CHARACTER STRINGS It should be noted that the package is written in Fortran IV, and the string handling facilities in this language are not partic- ularly good. Without some understanding of how strings are handled the user may experience some difficulties with this area. Basically there are two simple ways of handling strings as subroutine parameters in Fortran IV: either the string and the number of characters is passed or the string terminated by a null character is passed. In the latter case the called routine uses the DEC special string length routine LEN(string) to find the posi- tion of the first null character in the string. This latter is the technique used in this package. However, if the user does not ensure that all strings are terminated by a null the results may not be satisfactory. In the subroutines reference is made to a byte array called STRING. This serves as a local reference. It is given an unknown dimension, allowing the user's program to determine the matter. It is suggested that the use of a string or byte vector in the user's program (with the ENCODE statement where appropriate to convert numbers to character strings) and a trailing null be seriously con- sidered as a safe way of passing text (and numbers) for printing. This is shown here: BYTE string(80) . . . . x=2.5 encode(4,1000,string) x 1000 format(F4.1) string(5)=0 call label(string) However, the user may prefer to pass predefined strings stored as variables. This can lead to trouble. The following technique is NOT correct by itself: REAL X(4) DATA X/' 2.5',' 5.0',' 7.5','10.0'/ . . . call label(X(2)) While the individual character strings have been correctly declared they are not terminated by nulls, so the LABEL routine can not tell how many characters to print. However, if a COMMON block is added and used as shown below, the system functions: REAL X(4) DATA X/' 2.5',' 5.0',' 7.5','10.0'/ COMMON /A,IA/ DATA IA/0/ . . . A=X(2) HVPLOT Page 6 call label(A) The reason is that the variable IA will follow directly after A and will look to the string routines like the required terminating null. HVPLOT Page 7 INSTALLATION RT-11 In most cases it suffices to build the HVPLOT library and to make it available for subsequent linking. To do this under RT-11 you need only to type @HVPLOT and the command file will do the rest. You will also need the PL handler on your system disk, and it will need to be installed. The easiest way of doing this is to type @PL and let the command file do the rest. You should reboot the system when PIP prompts you. You do not need to LOAD the handler as the INIT routine will do this for you it (and it will unload automatically at program exit). It would be nice if the abtio$ bit in the handler could be persuaded to do it's bit after a C, but I (RNC) don't seem to have had much joy with this so far. Advice is welcome. Other Operating Systems For use under other operating systems you will need to edit the following subroutines: INIT, in HV0.FOR, to alter the OPEN and handler LOAD statements PLOFF, in HV3.FOR to alter or remove the ILUN and SPFUN state- ments These should be modified to suit your particular requirements. Note that if you use the CHECK routine you cannot spool the output. The same applies to any form of digitising, of course. There are three test routines on the distribution: BOX, SPI- RAL, and READIN. Each has a .COM file to aid in trying it out. The .COM files also illustrate the requirements for linking your program with the package (very simple). The BOX program draws a rectangle and writes "Box" in the middle. It is designed to pro- vide a very simple test of your system, and to illustrate the minimal requirements in setting up a program. The SPIRAL program draws an annotated and numbered axis and some data: this illus- trates the various steps required to produce a full "axis". The READIN program is for use only with a plotter. It draws an axis and then enters the digitising mode. It should be studied with a little care if you wish to set up your own digitising program. Note in particular that the plotter has to be put into and out of the digitising mode. HVPLOT Page 8 SUBROUTINES - CONTROL These routines are used for setting up and overall control of the devices and plot package. INIT, SCALE and SELECT must be called. INIT The subroutine starts with a request for the user to choose which device is required. The information is held for use in other routines and the appropriate device is initialised. Note that if you want both devices initialised you must call INIT twice, answer- ing "H" once and "V" once. Switching between the two is done with DEVSWT. Initialisation of the plotter and the plot package follows: without this command neither the plotter nor the terminal will function. The user should note that logical unit 9 is used by the package for the plotter output. Since RT-11 does not support mul- tiple terminals in the conventional sense, a device handler called PL is supplied with HVPLOT, along with device handler PL.SYS (which must be on the system disc)if the plotter is used (see Installa- tion). With any multi-terminal system, it is probably sufficient to attach LUN 9 to a spare terminal port. On an LSI 11/2 running RT11FB V4.0 or V5 speeds up to 4800 baud are easily supported. However, 9600 baud during heavy Fortran floating point sometimes seems to be just beyond the limit for an 11/2. An LSI 11/23 would probably be fast enough to support 9600 baud. Plotting is fairly continuous as the plotters all have significant internal buffers and generally can't keep up with 4800 baud. PLOFF HP-GL plotters: Used to turn the plotter OFF after a plot. It is HIGHLY recommended that this call be used to avoid problems with unexpect- ed interrupts from the plotter. Not only does it send a "sleep" command to the plotter, but it also disables the interrupts in the PL handler. The first subsequent write to the plotter (which should be PLON or INIT) will reactivate the interrupts. (If you have adapted this to run under another O/S, you may need to delete this part of PLOFF. Advice from anyone doing this is welcome.) There does not seem to be any very simple, clean and automatic way under RT-11 of turning off the interrupts for the handler port when the program finishes. There is meant to be, but I can't get it to work satisfactorily yet. If you can, let me know, please. Consequently, if you don't use this at the end of your program, it is possible that, due to noise or other happenstance, the plotter could reactivate the interrupts on the port after the handler has been "disconnected" from the program or removed from memory. This HVPLOT Page 9 would most likely ( = "does always") crash the system. Note in particular that if it is wished to call HOME as well, this must be done before PLOFF is called. REGIS terminals: Used to send a REGIS "off" command. But note that Command strings sent to the REGIS terminal in this package switch REGIS on, send the command and then switch REGIS off. This leaves the termi- nal in text mode in between calls. PLON HP-GL plotters: To turn the plotter back ON after invoking PLOFF. Note that this is the only way of doing this, short of calling INIT. The advantage of using PLON is that the plotter remembers all setup commands previously sent plus the current position. REGIS terminals: Sends a REGIS "on" command string. RESTOR HP-GL plotters: This restores some of the plotter functions to a predefined state. The plotting window size is not altered but the following are set. For further details see the plotter manual. Plotting mode . . . . . . . . .Absolute Relative character direction Horizontal Line type . . . . . . . . . . .Solid line Line pattern length 4% of the distance from P1 to P2 Input window. . . . . . . . . .Mechanical limits of plotter Relative character size Width=0.75% of(P2x-P1x) Height=1.5% of (P2y-P1y) (See SCALE) Symbol mode . . . . . . . . . .Off Tick length tp=tn=0.5% of (P2x-P1x) for Y-tick and 0.5% of (P2y-P1y) for X-tick Standard character set. . . . .Set 0 Alternate character set Set 0 Character set selected. . . . .Standard Character slant 0 degrees Mask value. . . . . . . . . . .223,0,0 Digitise clear On Scale . . . . . . . . . . . . .Off HVPLOT Page 10 Pen velocity 38.1 cm/s Label terminator. . . . . . . .ETX (ASCII decimal 3) REGIS terminals: No effect: returns immediately. SCALE(Xmin, Xmax, Ymin, Ymax) Establish the user coordinate system. Xmin The minimum value on the x axis. Xmax The maximum value on the x axis. Ymin The minimum value on the y axis. Ymax The maximum value on the y axis. Having scaled the device to the required values, future com- mands must be given in terms of this new coordinate system. Note: The top lefthand corner of the paper, as inserted into the HP7470A plotter, is roughly P1, while the bottom righthand corner is P2. For further details,refer to the relevant plotter manual. SELECT(N) HP-GL plotters: To select and/or store one of the pens. N = 0 Stores the currently selected pen. N = Odd number Load the lefthand pen on the 7470A. N = Even number Load the righthand pen on the 7470A. N = 1-6 Loads the appropriate pen on the 7475A. REGIS terminals: No effect: returns immediately. HVPLOT Page 11 SUBROUTINES - PLOTTING These routines are used for the majority of the plotting work. AXIS(X0, Y0, Xtick, Ytick) To draw the coordinate axis for a graph and put tick marks on the two arms. X0, Y0 The Origin of the axes. Xtick The space between ticks on the X axis. Ytick The space between ticks on the Y axis. Note that the tick spacings assume that the SCALE routine has been called. The size of the tick marks can be controlled with the SETTL command for the plotter but is fixed for the VT125 (unless you get into the software). DIR(Degree) To specify the individual character rotation (but NOT the string direction). The angle is in degrees relative to the X direction. It is in principle possible to do this to the VT125 as well, but the results turn out to be pretty ghastly. Character tilt should be possible in multiples of 45 degrees but only 0 and 90 degrees are catered for at the moment since varying character size is not. The use of this feature is largely confined to writ- ing up the Y-axis, and is done for you. DIRREL(Degree) HP-GL plotters: As for DIR, but the angle is taken relative to the positions of P1 and P2. Thus alteration of the plot area via P1 and P2 may cause the real angles to alter. Unlike DIR, the overall "image" is however preserved. REGIS terminals: Variable direction lettering is not supported. DRAW(X, Y) To draw a line from the current position to a new location (X, Y). In the event that (X, Y) is outside the legal plot window, the line will go to the edge correctly and the pen will be lifted while the plot point is outside the window. If SETSM is also called, a character will be plotted at each (X, Y) point given, but note that if the calling program is to operate on either the HP-GL HVPLOT Page 12 plotter or the REGIS terminal at will then SET* subroutines should not be used. It is possible to still send these instructions but they have no effect on the terminals. HOME In the case of an HP-GL plotter, this will position the pen head over the top lefthand corner near P1 for the maximum view of the plot, return the pen to its holder and turn off the symbol mode. The effect for a REGIS terminal is a to put the cursor in the top left hand corner of the screen. Note that this should not be used as a substitute for PLOFF, but must be called before it if it is to be used. JMPCH(Cx, Cy) HP-GL plotters: To jump a distance related to the size of characters. Used for example in positioning labels. Cx The no. of character width spaces. Cy The no. of character height spaces. Note that the parameters are indeed real, not integer: fractions of a character are permitted. Note also that if the last character-writing instruction specified other than a baseline angle of zero, the height and width values here will be relative to the non-zero baseline angle. REGIS terminals: No effect: returns immediately. JUMP(X, Y) To move the pen or the terminal cursor to a new location (X, Y) without drawing. LABEL(String) To output a text String (byte array) at the current position. The character set, direction, size, and slant must be predefined if default values are not required. The comments in the introductory chapter on character strings should be noted before using this routine. It should also be noted that this routine can be used repetitively. Consider the writing of a label such as 'Step Size: 0.200 radians' where the '0.200' is actually calculated at run-time. This can be done with three calls to LABEL: one for the 'Step size:', one for HVPLOT Page 13 the number after it has been put into a character string with the ENCODE statement, and one for the 'radians'. It is not necessary to reposition the pen before each call: plotting will continue where the last call left off. LABELA(Char) To send one character from the second character set at the current position (as for LABEL). The alternate character set, direction size and slant must be predefined if default values are not required. For further details consult the relevant manuals. LABELN(N) To write an integer number (which may print as several characters) at the current position. The character set, direction, size and slant must be predefined if the default values are not required. This is primarily used in numbering tick marks on axes. LABEXY(X, Y, Scal, Degree, String) To label the X or Y axis, as appropriate. X, Y The coordinates on axis for start of label. Scal The width of characters to be printed (h=1.5*w) Degree The direction of print of label, (0 or 90.) String The required label (byte array). An offset relative to the character size is incorporated into the subroutine to bring the labelling away from an axis line. The offset is switched depending on whether X or Y is zero. If both are non-zero,there is no offset: for this the routine TEXT is sug- gested so that the start location can be chosen. POINT(X, Y) To plot a point at location (X, Y). This is principally intended for the creation of point plots. HP-GL plotters: If a character is desired at each point rather than just a point, use SETSM to select the symbol and then just JUMP to each point. The symbol will be plotted automatically. HVPLOT Page 14 SEND(String) A catch-all for unspecified commands: whatever is in the String is sent to the device without any modification. This is used with digitising, for instance. SIZE(Width, Height) To set the absolute character size in centimetres. Width Width Height Height HP-GL plotters: If the width value is zero then the size defaults to 0.19 for width and 0.27 for height. Negative parameters will produce mirror images. The range of values for width and height is -128 to 127.9999, but the high end is meaningless. REGIS terminals: No effect: returns immediately. TEXT(X, Y, Scale, Degree, String) To output a string at a specified position, size and baseline angle. X, Y The coordinates for the start of the label. Scale The characters width to be used (h=1.5*w). Degree The string baseline slope (plotter only). String The required label (byte array). REGIS terminals: The degree argument is defaulted to 0.0 when this is used with a terminal: only horizontal text is currently supported. HVPLOT Page 15 SUBROUTINES - ERROR CHECKING and DIGITISING The HP plotters are usually capable of replying to an enquiry regarding their current error status or position. The CHECK routine is provided for errors, and PREADn is provided for other input. CHECK() If this is to be used with the plotter, it must be called before PLOFF is called. It will return two error codes, one for HP-GL language errors and one for RS232C errors. If an error code is non-zero, it will be displayed on the terminal; if zero, it will not be displayed. A message noting that the check has been done is displayed under all conditions, however. The error codes, as described by the HP manual, mean the following: 0 No error (not displayed on terminal) 1 Instruction not recognised 2 Wrong number of parameters 3 Out of range parameters, or illegal character 4 - 5 Unknown character set 6 Position overflow 7 - 8 Vector received while pinch wheels raised 9 - 10 Output instruction received while executing another o/p instr'n. 11 Invalid byte after <.> in device control instruction 12 Invalid byte while parsing (defaults will be used) 13 Parameter out of range 14 Too many parameters (excess ignored) 15 Framing, parity or overrun error 16 Input buffer overflow No corresponding REGIS routines exist but if CHECK is called when in REGIS mode it returns immediately. DIGITZ(X, Y, Done) The HP-GL plotters can return the current position on demand. If the optional fiber optic sight is put in place of the pen, a graph or drawing put in the plotter and the pen moved such that the target is over the desired position on the paper, the plotter can measure that position. The "enter" key on the plotter is used to tell the system when the user is ready for the next point. The following points should be noted for successful operation of the plotter as a digitiser: 1. Do not attempt to store the fiber optic pen in a holder: the holder will probably be already occupied, and it won't HVPLOT Page 16 fit anyhow. This means that you must unload the fiber optic pen before you tell the plotter to pick up another pen too. You do this with SELECT(0). 2. The X and Y parameters are REAL*4 and are in user units, as set up by SCALE. You can modify the routine to return plotter units if you wish. 3. The Done parameter is LOGICAL*1, and is false until you digitise the same point twice, when it becomes true. This is used as a convenient flag for indicating that you have finished digitising. 4. The pen should be put down before you start digitising: this gives better resolution. 5. The plotter should be put in digitise mode before you start digitising, and should be taken out of digitise mode after. The test program READIN.FOR can be used as a convenient starting point for understanding this function. PREADn(I [,J [,K [,L] ] ]) The HP plotters return data in a known format, and the returned variables may be obtained in this way. Typical uses for these routines would be the error checking mentioned above (one parameter) and digitising with the plotter (three parameters - x,y,pen), except that these actually use special optimised ver- sions. HVPLOT Page 17 SUBROUTINES - SUNDRY The calls to subroutines of the form SETxx are used to define or change specific attributes. For the Plotter, the xx are the letters used in the plotter instruction manual, which contains a more detailed description of their use. For the terminals suitable mnemonics have been chosen, some of which are the same as for the plotter: the VT125 manual allegedly contains more information but may prove to be incomprehensible. HP-GL Plotters: PENDN To put the pen down at the current position. This routine also forces a rewind or a buffer dump to ensure the buffer is actu- ally output to the device. This call should not normally be needed. PENUP To lift the pen while remaining in the current location. The rewind is also executed as in PENDN. Again, this command should not be needed. SETCA(N) To define the alternate character set for the plotter. N must be in the range 0 to 4 to choose one of the five possible character sets. The default value after initialization is 0, the same as the main set. SETCS(N) To define which character set is to be used as standard. For the plotter, N must be in the range 0 to 4 to choose one of the five possible character sets. The default value after initializa- tion is 0. SETIP(Ix1, Iy1, Ix2, Iy2) To set the registration points P1 and P2 to ensure the same size plot. The parameters are in plotter units. The figures quot- ed apply to the HP7470A: see the manuals for other models. There is no checking in the subroutine. Ix1, Iy1 The coordinates of P1. Ix2, Iy2 The coordinates of P2. HVPLOT Page 18 The range for Y coordinate is the same for both P1 and P2: 0 <= Y <= 7650 . The range for X coordinate depends on the paper setting: for the plotter set for US paper 0 <= X <= 10300, for A4 paper 0 <= X <= 10900. On power up P1 is set to (250,279) and P2 is set to (10250,7479). SETIW(Xll, Yll, Xur, Yur) This can be used to restrict the area of the plotting surface. The parameters are in plotter units. On initialisation the window is set to the maximum plotting area. Xll, Yll Coordinates of Lower Left of window area. Xur, Yur Coordinates of Upper Right of window area. SETLT(Npatn, Patln) To define the type of line to be used when drawing. The lines are specified in the plotter manuals. Note that line type 0 is NOT a simple line: see SETLTS. Npatn The line pattern number (0 - 6). Default 0. Patln The % length of a pattern. Default is 4%. Again , the distance between scaling points is the reference for the percentage lengths. SETLTS To reset the line type back to a continuous line. SETSA Temporarily selects the predesignated alternate character set for use. Note that the set remains the "alternate" set. SETSL(Angle) This defines the individual (italic) slope of the characters. (To define the slope of a baseline, see DIR.) Angle The tangent of the angle to the vertical. Decimal numbers between -128 and 127.99 are accepted. Using 0 will result in a return to vertical which is the default value. Note that outside an absolute value of 3 is not very useful. HVPLOT Page 19 SETSM(Char) To set the symbol to be drawn at each point. The character is centered at the end of the vector. The default is a null, and this can be restored by calling SETSM with a zero for an argument. This routine is quite useful for doing multiple point or vector plots on one graph. SETSR(Width, Height) The standard size of the characters can be defined relative to the chosen scale. Width As a % of the horizontal distance. Height As a % of the vertical distance. The size of characters can also be set in absolute terms: see SIZE. SETSS Reselects the standard character set for use. SETTL(Tplus, Tminus) Tick marks can be draw at the current location and this routine is used to control the tick size. Both the positive and negative length of the mark can be altered. Tplus The % distance on the positive side Tminus The % distance on the negative side The % distances referred to are relative to the X and Y axis scaling lengths. The defaults are .5% of the scaling lengths. SETVS(Speed) The velocity with which the pen travels can be varied from the default value 38.1cm/s down to .38cm/s. For transparent film the speed should be set at 10cm/sec. REGIS terminals: VTCLR To clear the Terminal screen. HVPLOT Page 20 SCL(xx, yy, x, y) Points to be plotted require scaling from user coordinates to screen coordinates. (This is done for you with the plotter) PICK(ii, n) To move the cursor n pixels in the direction as defined by ii, as follows: 2 3 1 4 . 0 5 7 6 TICK(ii, n) To draw n pixels in direction ii, direction as shown in the pick routine. ATICK(flag) To draw ticks, assumes that the cursor is correctly located and draws a small mark, if flag = .false. draws horizontally if flag = .true. draws vertically INDEX ATICK . . . . . . . . . . . . . . . 20 AXIS . . . . . . . . . . . . . . . . 11 CHECK . . . . . . . . . . . . . . . 15 DIGITZ . . . . . . . . . . . . . . . 15 DIR . . . . . . . . . . . . . . . . 11 DIRREL . . . . . . . . . . . . . . . 11 DRAW . . . . . . . . . . . . . . . . 11 HOME . . . . . . . . . . . . . . . . 12 INIT . . . . . . . . . . . . . . . . 8 JMPCH . . . . . . . . . . . . . . . 12 JUMP . . . . . . . . . . . . . . . . 12 LABEL . . . . . . . . . . . . . . . 12 LABELA . . . . . . . . . . . . . . . 13 LABELN . . . . . . . . . . . . . . . 13 LABEXY . . . . . . . . . . . . . . . 13 PENDN . . . . . . . . . . . . . . . 17 PENUP . . . . . . . . . . . . . . . 17 PICK . . . . . . . . . . . . . . . . 20 PLOFF . . . . . . . . . . . . . . . 8 PLON . . . . . . . . . . . . . . . . 9 POINT . . . . . . . . . . . . . . . 13 PREADn . . . . . . . . . . . . . . . 16 RESTOR . . . . . . . . . . . . . . . 9 SCALE . . . . . . . . . . . . . . . 10 SCL . . . . . . . . . . . . . . . . 20 SELECT . . . . . . . . . . . . . . . 10 SEND . . . . . . . . . . . . . . . . 14 SETCA . . . . . . . . . . . . . . . 17 SETCS . . . . . . . . . . . . . . . 17 SETIP . . . . . . . . . . . . . . . 17 SETIW . . . . . . . . . . . . . . . 18 SETLT . . . . . . . . . . . . . . . 18 SETLTS . . . . . . . . . . . . . . . 18 SETSA . . . . . . . . . . . . . . . 18 SETSL . . . . . . . . . . . . . . . 18 SETSM . . . . . . . . . . . . . . . 19 SETSR . . . . . . . . . . . . . . . 19 INDEX SETSS . . . . . . . . . . . . . . . 19 SETTL . . . . . . . . . . . . . . . 19 SETVS . . . . . . . . . . . . . . . 19 SIZE . . . . . . . . . . . . . . . . 14 TEXT . . . . . . . . . . . . . . . . 14 TICK . . . . . . . . . . . . . . . . 20 VTCLR . . . . . . . . . . . . . . . 19