THE UNIVERSITY OF MICHIGAN Technical Report 30 DRAWL 70: A COMPUTER GRAPHICS LANGUAGE By Hprzog Fred Shadko CONCOMP: Research in Conversational Use of Computers F. H. Westervelt, Director ORA Project 07449 Supported by: ADVANCED RESEARCH PROJECTS AGENCY Department of Defense Washington, D.C. Contract No. DA-49-083 OSA-3050 ARPA Order No. 716 Administered through: OFFICE OF RESEARCH ADMINISTRATION Ann Arbor August 1970

ABSTRACT The DRAWL language provides a simple means of defining a graphical composition and specifying operations on it. A catalog of parts is kept; any defined item may be re-used any number of times. Changes in viewing angle, scale, absolute location, and projection are easily affected in three dimensions via homogeneous coordinate projective geometry. Graphical output is available on cathode-ray tube-displays, digital-incremental plotters, and on-line computer line-printers and remote printing terminals. iii

TABLE OF CONTENTS Page ABSTRACT............................. iii TABLE OF CONTENTS........................ LIST OF FIGURES......................... vii PREFACE............................. ix PROGRAMMER'S NOTE........................ xi INTRODUCTION........................... 2 DEFINITION OF POINTS....................... 4 NAMING AND DEFINING SEQUENCE FOR OBJECTS.............. 5 NAMING AND CREATING SEQUENCE FOR ASSEMBLIES......... 6 TRANSFORMATIONS IN DRAWL..................... PERFORMING A TRANSFORMATION.................. 10 EXECUTING THE DRAWING..................... 10 COMMENTS ON DRAWL NAMES AND OTHER PROGRAMMING CONVENTIONS. 11 APPENDIX A - HOMOGENEOUS COORDINATE PROJECTIVE GEOMETRY..A APPENDIX B - DRAWL SUBROUTINE DESCRIPTIONS....... B APPENDIX C - DRAWL OUTPUT PARAMETERS......... C1 Table Cl - Default settings for DRAWL RUN Parameters............... C1 APPENDIX D - SPECIAL DRAWL ROUTINES............... Dl APPENDIX E - DRAWL ERROR MESSAGES................ El APPENDIX F - SAMPLE DRAWL PROGRAMS................ Fl APPENDIX G - THE DRAWL 70 DATA STRUCTURE............. Gl APPENDIX H - DRAWL 70 FORTRAN SOURCE LISTING........... Hi APPENDIX I - ALPHABETICAL LIST OF DRAWL SUBROUTINES....... II v

LIST OF FIGURES Page Figure 1. The DRAWL Sequence of Operations........... 1 Figure 2. Specification of a Rectangular Parallelopiped.... 3 Figure 3. DRAWL Hierarchy................... 3 Figure 4. Specifications of a Triangle............. 7 Figure 5. DRAWL Transformation Matrix Breakdown........? Figure A-1. DRAWL Transformation Matrix Breakdown....... A-5 Figure A-2. Translation................... A-a Figure A-3. — Rotation.................... AFigure A-4. p2 —Rotation.................... A-8 Figure A-5. P3 —Rotation............... A-9 Figure A-6. The Perspective Transformation........... A-10 Figure A-7. Illustration of Perspective Transformation Matrix....................... A-1 Figure F-l. DRAWL Output.................... F-2 Figure F-2. DRAWL Output.................. F-3 Figure F-3. DRAWL Output.................... F-5 Figure G-l. DRAWL Data Structure................ G-2 Figure G-2. Internal Operation of TRANSF............ G-3 vii

PREFACE The DRAWL language was conceived in conjunction with a computer graphics course offered during the Fall term, 1966, by the Industrial Engineering Department, the University of Michigan. It was actually implemented. The language is still in a state of flux as a result of continuing efforts to improve its functional capabilities and overcome some of its original limitations and deficiencies. The main intent of the DRAWL language was to create a teaching device that would provide for a relatively simple means of defining a graphical composition and specifying subsequent operations without requiring the user to be trained as a programmer. It was envisioned that DRAWL could be a particularly useful tool, since once an object or an assembly was defined, changes in the viewing angle (perspective), scale, or projection could be obtained easily. The same task performed manually, would ordinarily require many hours at a drawing board and probably involve tedious and repetitious operations. In essence, DRAWL provides a mechanism for presenting an idea to a person, defining an object completely before actually drawing it, transmitting precise information about the object under consideration, and making meaningful transformations on the object. The graphical output is particularly meaningful when working with a complex object, because as an object's complexity increases the individual's ability to visualize and construct the object is impaired markedly. Another important factor that led to the development of DRAWL was the need to provide for a cataloging of parts. Such a "catalog of parts" simplifies many graphics problems. This feature is not always provided in some language structures designed for controlling drafting or plotting machines. In DRAWL not only can a "catalog of parts" be easily specified, but a set of translations and rotations can be recalled from memory on command. This gives some insight into the form, depth, and flexibility of the language. ix

PROGRAMMER'S NOTE DRAWL is the "all-obvious" acronym for DRAWLanguage. DRAWL was originally written in the MAD language and implemented on an IBM 7090 computer at the University of Michigan. With the arrival of a new system, DRAWL has been rewritten in FORTRAN IV and is now running under the Michigan Terminal System (MTS) on an IBM 360/67 computer and its associated plotting system, the CALCOMP 780/763 Digital Incremental Plotter. The sequence of operations involved in utilizing DRAWL as a computer graphics tool is depicted in Figure 1. All DRAWL instructions are FORTRAN subroutine or function "calls." This type of organization enables the language to retain simplicity without compromising functional utility. The more experienced user can best utilize the language by appropriately combining DRAWL instructions with other FORTRAN statements. xi

MATHWNIATICAL MODEL OF ENTI TO BEDRAWN — SKETCH OF ENTITY — CAL P A ALL /^t ~t~tF*<s-mr, ~ CAIC ~A~LL~ r~src( 14S~l(T [COI~TR- / -r COKTlPtfL._13 I ^\.\-'-^rI-Iz

-2INTRODUCTION Drafting is a method of representing projections of threedimensional objects in two dimensions. The DRAWL language is a drafting language that takes the pencil out of the draftsman's hands and gives it to the computer. The resulting drawings are easily changed, and more easily stored. The DRAWL language relieves the user of tedious, noncreative drafting chores and thus provides him with more time for creative work. The basis of this drafting system is that all objects are tLo be described by straight lines connecting specified points 1in spae;t. Further, it is assumed that a given object is a set of liles conlIeI'ted in one logical element. Thus, generally, invisible lilies connectin' line segments are required, as illustrated by the rectangul ar paralle!lopiped (Figure 2), where the dotted lines represent the invisible linls. All objects are wire-frame figures; no shading or solidity is conside ired. These line segments are defined by sequentially specifying thtle starting point, all intermediate points, and the enld point. Information specifying the visibility of each segment accompanies these definltionIs. Once a number of objects are so defined they may be associated to become an assembly. Several assemblies and objects may, in turn, be collected into another assembly. Conceptually, assemblies may be nested within assemblies to any depth. Thus objects are defined by points, uand assemblies are defined as a collection of objects, or as objects and previously defined assemblies. This hierarchy is illustrated i F'iure To name and construct, ie., define, objects and assemblies, the following key words and commands are needed: NAMOBJ NAMASM POINTS NAME INCRPT FINASM FINOBJ Since each of these instructions is a call on a subroutine, each must be preceded by the word CALL. Their use and purpose are decribed in the sequel. Means for manipulating geometric elements are described; transformations are defined and carried out by the key word instructions

-3Figure 2 Rectangular Parallelopiped (DRAWL Specification) ASSEMBLY N IJ A MCTB IPOINTS IPOINTS IPONTSl Figure 3 DRAWL Hierarchy

-4CALL NAMTRA and CALL TRANSF. Several other key words are provided for executing drawings and other convenient functions. The following paragraphs describe the rules associated with these key words and provide illustrative examples. Definition of Points One defines a point by specifying its homogeneous coordinates x, y, z, and w, together with a switch that determines the character of the line element. The switch must be set to define the line connecting the last point to the present point as "seen" or "unseen." The location of the new point may be specified by its "absolute coordinates," x, y, z, w, or its "incremental coordinates," Ax, y, Az, Aw, with respect to the last point. These four coordinates, x, y, z, and w, are the homogeneous coordinates from which the physical coordinates X, Y, Z, are obtained by X=x y yZ=L. X = x Y = -Y Z = z w w w The X, Y, and Z coordinates of the point are given in terms of the homogeneous variables XVALUE, YVALUE, ZVALUE, and WVALUE as X = XVALUE/WVALUE Y = YVALUE/WVALUE Z = ZVALUE/WVALUE where WVALUE is actually a scaling factor. It can be verified that if all points of an object were specified with w = 3 rather than w = 1 the effect would be to decrease the overall size of the object by onethird (1/3). Two points P1 = (SWITCH1, X1, Y1, Z1, W1) and P2 = (SWITCH2, X2, Y2, Z2, W2) are therefore equivalent if and only if X1/Wl = X2/W2, Y1/Wl = Y2/W2,

-5and Zl/W1 = Z2/W2 The main purpose of the W component, however, is not to facilitate a change in the scale or size of an object alone, but this formulation permits a uniform treatment of all transformations, rotation, translation, and projection, as will be seen subsequently. THE NAMING AND DEFINING SEQUENCE FOR OBJECTS DRAWL utilizes homogeneous coordinates in defining points. The following sequence is the rule for naming and defining objects CALL NAMOBJ('Name of Object') CALL POINPS (SWITCH, XVALUE, YVALUE, ZVALUE, WVALUE) INCRPT CALL INCRPT (SWITCH, XVALUE, YVALUE, ZVALUE, WVALUE) POINTS CALL FINOBJ where CALL NAMOBJ initiates the naming of an object CALL POINTS is used for specifying absolute point data CALL INCRPT is used for specifying incremental ci'-:t data CALL FINOBJ terminates the sequence of point definniltion for this object Name of Object may be any character string of one to eight characters terminated by an @ sign. The parameters associated with POINTS are: * See Appendix A.

-6CALL POINTS (SWITCH, XVALUE, YVALUE, ZVALUE, WVALUE) Scale factor, typically set to unity (must be floating point). The values of the three-space coordinates (must be floating point variables or numbers). Switch for specifying logical information (must be integer). SWITCH is an integer providing required logical signals: If 1 then line ending at this point will be visible If 0 then line ending at this point will be invisible. For example, the points of the object in Figure 4 are specified by CALL POINTS (0,0.,1.,.,1.) CALL POINTS (1,1.,1.,0.,1.) CALL POINTS (1,0.,2.,0.,1.) CALL POINTS (1,-1.,1.,0.,1.) CALL POINTS (1,0.,1.,.,,1.) Note that the first point of every object should be the end of an invisible line. INCRPT uses the same logical switches, but the remaining parameters are somewhat different. CALL INCRPT (SWITCH, X, Y, Z, W) has the effect of adding W to the XVALUE of the previous CALL POINTS, W to the previous YVALUE, and Z to the previous ZVALUE. Conveniently then an object can be defined relative to a starting point given by CALL POINTS. THE NAMING AND CREATING SEQUENCE FOR ASSEMBLIES The rule for naming and creating assemblies is: CALL NAMASM ('Name of Assembly') CALL NAME ('Name of First Element') CALL NAME ('Name of Last Element') CALL FINASM

-7Y (0,2,0,1) 3 2 /.....\ (1,1,0,1) (-1,1,0,1) 4 _1 (0,1,0,1) (0,0,0,1) Figure 4. Specifications of a Triangle.

-8where CALL NAMASM initiates the naming of an assembly CALL NAME names an element CALL FINASM terminates the naming of the elements of an assembly and closes the assembly. Name of Assembly may be any character string of eight or fever characters, terminated by an @ sign. Name of Element must be the name of a defined assembly or object. TRANSFORMATIONS IN DRAWL By appropriately defining a transformation a user can control the rotation and translation of an object or assembly. Other uses include copying, scaling, and projection, including perspectives. There are two DRAWL instructions associated with transformations. The first names the transformation and specifies its elements, while the second is a transformation operator. The first is CALL NAMTRA('Name of Matrix', ARG(l,l),ARG(l,2),ARG(l,3),ARG(1,4), ARG(2,1),ARG(2,2),ARG(2,3),ARG(2,4), ARG(3,l1),ARG(3,2),ARG(3,2),ARG(3, 4), ARG(4,1),ARG(4,2), ARG(4,3), ARGT(4,4)) where CALL NAMTRA stores the name of the transformation, the values of the elements of the transformation matrix (A(l,l),..., A(4,4)) and their association. Name of Matrix may be any character string of eight or fewer characters terminated by an @ sign. The transformation is specified as a single four-by-four matrix: it can accomplish a full projective transformation because DRAWL employs homogeneous coordinates. The elements of the transformation matrix, ARG(1,l) through ARG(4,4), can be separated into various functional groups. Figure 5 depicts the breakdown of the transformation matrix. Any one transformation matrix can also be thought of as the concatenation of the four functionally independent matrices.* * For a general discussion of transformations see Appendix A.

-9(1,1) (1,3) P R I 0 ROTATION E C T I 0 N (4,1) TRANSLATION (4,3) SCALE Figure 5. DRAWL Transformation Matrix Breakdown

-10Combination of the functionally independent submatrices is possible and at times very desirable since sometimes one transformation matrix can perform all desired functions. It should be noted that if both a translation and rotation are specified the translation is performed after the rotation. In general, the commutative law does not apply to matrix multiplication. Therefore, when transformation matrices are concatenated their sequence is very important. PERFORMING A TRANSFORMATION The command for performing a transformation after the transformation matrix has been defined is CALL TRANSF ('New Entity Name','Source Entity Name','Transformation Name') where New Entity Name is the name of the new entity resulting from the transformation. Source Entity Name is the name of the old entity to be transformed. Transformation Name specifies the name of the transformation matrix used. See the section on program conventions for a discussion of the assumptions made when New Entity Name is the same as Old Entity Name. EXECUTING THE DRAWING The command CALL DRAW('ENTITY@') will produce a Calcomp plot of any previously defined object or assembly named'ENTITY'. This command can be programmed as soon as'ENTITY' has been fully defined. Each DRAW command produces one plot only. A new plot is started with each DRAW command. A drawing is prepared by using only the X, Y coordinates of the points in objects or assemblies to be drawn. Specifying CALL SHOW('ENTITY@') will cause'ENTITY' to be displayed on the CRT display on which the user is running.

-11CALL PRTPLT ('ENTITY@') will cause'ENTITY' to be drawn without connecting lines on the computer's line-printer. CALL PRTOUT('ENTITY@') will print the switch and x-y values of'ENTITY' to be printed out. CALL PRTPUT('ENTITY', LDN) will cause the switch and X-Y values of'ENTITY' to be written on the file or device attached to Logical Device Number LDN at RUN time. COMMENTS ON DRAWL NAMES AND OTHER PROGRAM CONVENTIONS DRAWL Names are character strings* of from one to eigsht characters. If there are less than eight characters, the string must be terminated by an "@" (at-sign). The character "@" may not be imbedded in a DRAWL name, and when used as a terminal character, is not part of the name. FORTRAN IV requires that character strings be enclosed in primes ('). The following are legal DRAWL names:'NAME''NAMOFOBJ' No "@" required since length is eight'N''OBJECT' See the FORTRAN IV rules for imbedding primes'1@' A non-alphabetic name'@' A null or all-blank name. Note that the length of the string'NAME@' is five while the length of a DRAWL name is always eight. The character "C" ac s as a sinal to the DRAWL processor to blank out all the characters to its right (including the "@") up to a total string length of eight. The following are illegal DRAWL names:'NAMOFOBJ' String too long'NAME' No terminal "@"'N'OBJECT Violates FORTRAN IV syntax rules. * A character string is a series of adjacent letters, numerals, and/or special characters (e.g.,. % - + & $ ~, etc.) Blank or space is also a special character. In FORTRAN IV character strings are read-in and written-out in A-format. All DRAWL names are character strings.

-12A DRAWL name may not be defined twice in a single DRAWL run. The following routines define DRAWL parts: NAMOBJ ( or NAMOBA, or NAMOBR) NAMASM NAMTRA ( or NMTRA 1, or CMBMAT) TRANSF ( first argument only). The only way the values associated with an entity can be altered is via TRANSF, when the first and second arguments are the same (e.g., CALL TRANSF('A@','A@''Q@' )). Users are cautioned that the values associated with an entity name at the time that the entity is included in an assembly will remain associated with the assembly even if the included entity is later transformed. For example: CALL INIT CALL NAMOBJ('l@') CALL POINTS(1, 2., 3., 2., 1.) CALL FINOBJ CALL NAMASM('l1AS' ) CALL NAME('1@') CALL FINASM CALL TRANSF('1@','1@', TRLATE(l.,,l.)) CALL DRAWI('lSM' ) will yield a drawing of a point at (2,3,2), not at (3,4,3).

APPENDIX A Homogeneous Coordinate Projective Geometry

A-1 We shall represent a point in space as a row vector whose elements are the three components measuring the location of the point from the origin, say, in a cartesian x-y-z system. Thus a gncterall point P is represented by P = [ x y z]. The manipulations that may be performed on a single point, or a set of points are known as transformations. We may wish to view the same point P from another coordinate system x'- y z', or P' = [ x' y' z']. We ask: What might the values x', y', and z' be if we knew x, y and z? To answer this we must know the relationship between the two coordinate systems. A unified treatment of all necessary transformations, such as those for displacement or rotation of coordinate systems, for scaling, and for projective geometry, occurs if we utilize the homogeneous coordinate representation of points. We shall now introduce this representation, and then follow with the derivation of a set of transformations. Homogeneous Coordinates The same point P is represented by a four-element row vector, thus P = [X Y Z H] from which the conventional components are obtained by X Y Z x = - y = - and z = - H H - H We achieve a certain amount of notational elegance by using biliteral symbols to signify the positional names in the homogeneous row vector. If we replace, for example, X by hx)and H by h the expression becomes P = [ hx hy hz h ]. The fourth element may be regarded as a scale factor. Hence, doubling the value of the fourth element, h, halves the physical or usual coordinates x, y and z. Given a homogeneous representation of a point, the physical coordinates can always be computed. The converse is not true, as shown with the physical point [3, 4, 5]. All three of the following homogeneous representations are equally valid and will yield the same specified physical coordinates:

A-2 Pi = [ 3 4 5 1 ] P2 = [ 6 8 10 2 ] P3 = [ 3o 40 50 10 ] General Formulation of Transformations Since transformations really concern the relationship among coordinate systems, and since computer graphics problems or aplications involve several such relationships, the conventional xyz or x'y'z' notations soon become unwieldy and we need a more generalized notation. We will use right-handed systems having a 1-axis, a 2-axis and a 3-axis. To distinguish one coordinate system, say the A-system, from another, the B-system, we shall call the a-system axes, di 02 and Y3, and the p-system axes, p1, P2 and P3. Further, rather than write out the row vector of the coordinates, we can designate a coordinate in the a-system by [hv]a: [hv]= [ hx hy hz h ]a In the notation, then, the name of the coordinate system is a subscript. Thus the relation of a point in the QU-system to a point in the 53-sust em is given by: [hv]p = [hv]a Mp, where Ma: is a four-by-four transformation matrix. Obviously there existsan inverse relationship, that is, given [hv]p we obtain [hv]l by: [hvi3 = [hv] Moa, where 3a is the transformation matrix for mapping 5 representations into a representations. Matrix algebra states that each such transformation matrix is the inverse of the other: MB = Ma M 1 and -l Ala= Iv Within each transformation matrix there is a tihree-by-tllre partition, R, which effects rotation in a general transformation.

A-3 Similarly the row T, effects translation; the column P, projection; and the scalar S, scaling (Fig. A-i). Any general transformation, then, may be broken down into the four sequential transformations: rotation, translation, projection, and scale. Without providing proof, we will move directly to simple cases of each of these situations. Translation In Figure A-2 the 0-system has been moved with respect to the P-system. The corresponding axes remain parallel, but the origin of the a -system has been displaced by [ AX AY AZ ] in ordinary coordinates, or [ hAX hLY hAZ h] in homogeneous coordinates. This situation and the corresponding transformation matrix 15 is shown in Figure A-2. Rotation For rotation we retain coincidence of the origin but the O axes will be rotated with respect to the p axes. For simplicity, however, we will consider three cases in which the coincidence of one set of corresponding axes is maintained in addition to the coincidence of the origins. First consider the case where the al and B1 axes coincide and we rotate the o- system with respect to the 3 system through an angle 0 as shown in Figure A-3. The corresponding values of the transformation MXa are also shown in Figure A-3. For the two other cases, rotation about the 62 axis and rotatiac about the P3 axis (see Figures A-4 and A-5 ) is show;i. Perspective Projection To illustrate this concept consider the x -, plane as the picture plane, and the eye point to be located at a distance a from the origin on the negative z axis. Then, using the transformation M (Figure A-6) if an object is given in the system, the transformed x,y data will represent the picture coordinates. This is readily proven by the special case of the point P1 in the y-z plane, Figure A-7. The projected point is P1. A word of caution: typically the picture plane lies betwee: the eye point and the object. Mathematically, if the eye point

A-4 should lie on the object, this makes z+a have the value zero and requires special computational considerations. Furthermore, should the eye point lie within an object as in simulating an observer walking through an architectural space, we obtain inverted images of that part of the object behind the viewer; special computations could handle this problem. DRAWL notes the case where the eye point coincides with a point in an object, but will draw the inverted images brought about when the eyepoint is "inside" the object.

A-5 (1,1) (1,3) P R I 0 d ROTATION E C T 0 ~ N L13 - - _kA` SL-T 4ICA (4,1) TRANSLATION (4,3) (SCALE Figure A-1. DRAWL Transformation Matrix Breakdown.

A-6 B2 a2,al ~3 - a l 1 0 0 0 0 1 0 AX AY0 1 0 AX AY AZ 1. h h or, M h LhAX hAY hAZ h Figure A-2 Translation.

A-7 B2 Oa \ \ M6 O 0. -SIN9 cosg I. I I I f 3 1 a 3 as 0. -SINO COSO 0. 0. O. O. 1. Figure A-3 Rotation about the j1 axis

A-8 a2 2 Ot /, 0.... 0. M SINO 0. COSO 0. 0. 0. 0. 1 Figure A-4 Rotation about the P2 axis.

A-9 32 \a2 e \ - cx C 3 COS9 SINO 0. 0. -SINE COSO 0. 0. aB 0. 0. 1. 0. 0. -. 0. 1 Figure A-5 Rotation about the P3 axis.

A-10 Y P XY the Picture Plane Eye-point 1 0 0 0 0 1 0 0 M = 0 0 1 I/a 0 0 0 1 Figure A-6 The Perspective Transformation

A-ll y plis EYE POIN0T J — a ------ By similar triangles, Y Y a+Z a Thus, y' =y S Y a+Z 1 Figure A-7 Illustration of the perspective transformation matrix.

APPENDIX B DRAWL Subroutine Descriptions

B-1 INIT NAME: INIT FUNCTION: Initialize all counters and pointers within DRAWL, and determine whether the user is operating in batch or conversational mode. CALLING SEQUENCE: FORTRAN IV: CALL INIT ARGUMENTS: None RETURN CODES: None COMMENTS: If the user is operating in batch mode, headers are printed on each page and an abbreviated newsletter is printed on the first page. The program flow is monitored by printed comments. All such printing is suppressed for conversational users. (See options "PRNT" and "NOPRNT" to override these default settings.) INIT also places the point (0,0,0) in the points table, effectively making the origin t1 e inictal pen or light-beam position. Each executiol of INIT causes all pointers to be cleared, and all future DRAWL operations are performed as if none had occurred before t!he call to INIT. EXAMPLE: CALL INIT

B-2 NAMOBJ NAME: NAMOBJ FUNCTION: Enter the name given as its argument in the name table, open the object, and open the points table. CALLING SEQUENCE: FORTRAN IV: CALL NAMOBJ (ENTITY, &l) ARGUMENTS: ENTITY - A DRAWL name which will be the name of the object about to be formed via calls to POINTS and INCRPT. RETURN CODES: &l - ENTITY has been used as a DRAWL name before ***DRAWL ERROR-ENTITY ALREADY USED AS DRAWL NAME. COMMENTS: This must be the first use of ENTITY as a DRAWL name. EXAMPLES: CALL NAMOBJ ('I@') CALL NAMOBJ ('QQSVNUM' )

B-3 NAMOBA NAME: NAMOBA FUNCTION: See NAMOBJ CALLING SEQUENCE: FORTRAN IV: CALL NAMOBA (ENTITY, &1) ARGUMENTS: See NAMOBJ RETURN CODES: See NAMOBJ COMMENTS: NAMOBA is an alternate entry to NAMOBJ. It is identical to NAMOBJ except that it calls POINTS (0,0.,0.,0.,1.) before exit. Thus objects created via NAMIOBA have the origin as their base. EXAMPLES: CALL NAMOBA ('3@') CALL NAMOBA ('ABSOLUTE' )

NAMOBR NAME: NAMOBR FUNCTION: See NAMOBJ CALLING SEQUENCE: FORTRAN IV: CALL NAMOBR (ENTITY, &l) ARGUMENTS: See NAMOBJ RETURN CODES: See NAMOBJ COMMENTS: NAMOBR is an alternate entry to NAMOBJ. It differs from NAMOBJ by calling INCRPT (0,0.,0.,0.,1.) immediately before exit. Thus an object created via NAMOBR has the point last placed in the most recently defined object as its base. A call to NAMO0BR before any calls to POINTS elicits: ***ARNING —THERE IS NOTHING TO TUSE A`S BASE FOR INCREMENTAL CALL. (0.,0.,0. ) ASSUMED. EXAMPLE: CALL NAMOBR ('OBJECT #1')

B-5 POINTS NAME: POINTS FUNCTION: Enter the point defined in the argument list and the associated line-type switch in the points table. The point is considered to be part of the current!opened object. CALLING SEQUENCE: FORTRAN IV: CALL POINTS (ISWIT, X,Y,Z,W,&1) ARGUMENTS: ISWIT - A full-word integer line-type switch. On-line plotter and CRT display: ISWIT Function 0 Leave the beam off (pen up) while moving to this point. 1 Leave the beam on (pen down) while moving to this point. Off-line, wide-bed plotter: ISWIT Function O Leave the pen up while movincg to this point ~1 Leave the pen down while movii to this point. 2 Draw a dashed line to this point. 3 Draw a center-line to this point. X - The floating-point, full-word value of the absolute X-coordinate, the first homogeneous coordinate. Y - The floating-point, full-word value of the absolute Y-coordinate, the second homogeneous coordinate. Z - The floating-point,full-word value of the absolute Z-coordinate, the third homogeneous coordinate. W - The floating-point, full-word value of the scale factor, the fourth homogeneous coordinate.

B-6 POINTS RETURN CODES: &1 - If POINTS was called before NAMOBJ, NAMOBA, or NAMOBR was called, i.e., before an object was opened: ***DRAWL ERROR - POINTS CALLED WITH NO NAMED OBJECT VIA NAMOBJ. COMMENTS: 1. If the fourth homogeneous coordinate, also viewed as a scale factor, is zerot (W = 0.) it will be replaced by one (W = 1.) and cause the comment: **-ARNING-SCALE FACTOR OF ZERO, CHANGED TO ONE. 2. If more than 1000 calls to POINTS o' INCRPT are executed, exe-cution will b1 e terminated: ***DRAWL ERROR-OVER 1000 POIISTS WERE SPECIFIED. TERMINSTING VIA "ABORT" SPECIFICATION. This limit can be altered byi chan in i a DIMENSION statement in the DRAWLT source code. EXAMPLES: CALL POINTS (0,1.,1.,1.,1.,&336) CALL POINTS (0,0.,0.,0.,1.) CALL POINTS (Z, 1.,1./16.,1./16.,16.) CALL POINTS (ISWIT,A,SIN(A),COS ( A ),1.

B-7 INCRPT NAME: INCRPT FUNCTION: See POINTS CALLING SEQUENCE: FORTRAN IV ARGUMENTS: ISWIT - Same as for POINTS X - The floating-point, fulll-word v:lue of the incremental X-coordinate — the first homogeneous coordi:nate. Y - The floating-point, fu11-word rvaliue of the incremental Y-coordilatethe second homogeneous coordinate. Z - The floating-point, full —word value of the incremental Z-coordinatethe third homogeneous coordinate. W - The floating-point. full-word value of the scale factor-the fourth homogeneous coordinate. RETURN CODES: See POINTS COMMENTS: INCRPT executes: CALL POINTS (ISWIT, X/ W+PX, Y/W+PY, Z/W+PZ, W) where PX is value of the first hlomo'eneous coordinate of the last point definled, PY i the value of the previous second homnogeneous coordinate, and PZ is the valuei of previous third homogeneous coordinate. X, Y, and Z are thus incremental values fronm the previous (X,Y,Z). In addition to the error comments generated by POINTS, INCRPT can also produce: **-WARNING-THERE IS NOTHING TO USE AS BASE FOR RELATIVE OR INCREMENTAL CALL (0.,0.,0.)ASSUMED. There must be a call to POINTS before a call to INCRPT or NAMOBR. EXAMPLE: CALL INCRPT (1,3-, 4., 5.,3. )

B-8 FINOBJ NAME: FINOBJ FUNCTION: Close the current object definition and record the number of points in the object in the linkage table. CALLING SEQUENCE: FORTRAN IV: CALL FINOBJ ARGUMENTS: None RETURN CODE: None COMMENTS: The number of points included in the object just defined is plrinted. EXAMPLE: CALL FINOBJ

B-9 NAlMASM NAME: NAMASM FUNCTION: Enter the name given as its argument in the name table, opening the assembly, and oren the association table. CALLING SEQUENCE: FORTRAN IV CALL NAMASM (ENTITY,&l) ARGUMENTS: ENTITY —A DRAWL name which will be used as the name of the assembly about to be created via calls to NAME RETURN CODES: &1-ENTITY has been used as a DRAWL name before: ***DRAWL ERROR-ENTITY ALREADY USED AS DRAWL NAME COMMENTS: This must be the first appearance of ENTITY as a DRAWL name. EXAMPLE: CALL NAMASM ('ENT #1~')

B-10 NAME NAME NAME FUNCTION: Declare the entity named as its argument to be a member of the currently open assembly. CALLING SEQUENCE: FORTRAN IV CALL NAME (ENTITY,&l,&2,&3) ARGUMENTS: ENTITY —The DRAWL name of the entity to be included in the currently open assembly. ENTITY must be defined at the time it is used as an arginent to NAME. RETURN CODES: &1 - The specified name ENTITY was not not found by NAME. ***DRAWL ERROR —ENTITY WAS NOT FOUND BY NAME. &2 - NAME was called before NAMASM or after FINASM. ***DRAWL ERROR —NAME CALLED WITH NO NAMED ASSEMBLY VIA NAMASM. &3 - ENTITY was the name of a transformation ***DRAWL ERROR —'ENTITY' IS NOT ENTITY NAME. COMMENTS: The values currently associated with the nan ENTITY will be associated with assembly being defined. These values will remain associated with the assembly being definled despite any future transformation of ENTITY. EXAMPLES: CALL NAME ('OBJ@', &200,&lOO,&500) CALL NAME ('1@', &3) CALL NAME ('37THOBJ@')

B-ll FINASM NAME: FINASM PURPOSE: Close the currently open assembly and enter the number of entities in the assembly in the association table. CALLING SEQUENCE: FORTRAN IV: CALL FINASM ARGUMENTS: None RETURN CODES: None COMMENTS: The number of entities included in the assembly just closed is printed. EXAMPLE: CALL FINASM

B-12 NAMTRA NAME: NAMTRA FUNCTION: Define a DRAWL transformation matrix. CALLING SEQUENCE: FORTRAN IV: CALL NAMTRA(TNAME, A1,A2,A3,A4, 1 A5,A6,A7, A8, 2 A9, A1O,All,AA1l, 3 A13,A14, A15, A16, 4 &1) ARGUMENTS: TNAME - The DRAWL name by whlich t!he t-ransformation being defined will be referenced. Al,...,A16 =- Fll-word, floatillng-point values of the desired DRAWL 4-by-4 transformation matrix, ordered by rows (see Appendix A for a detailed discussion of transformation matrices). RETURN CODES: &l - TNAME has already been used as a DRAWL name: ***DRAWL ERROR - TNAME ALREADY USED AS DRAWL NAME. COMMENTS: Should an illegal DRAWL transformation matrix be defined (A16=O.), A16 will be set equal to one (A16=l.) with this warning printed: ***SCALE FACTOR OF ZERO, CHANGED TO ON;E EXAMPLE: CALL NAMTRA ('TRI@',1.,0., 0.,., 1 0.,1.,0.,0., 2 O.,0..,1.,0 3 10.,-3.,7.,4., -4 &5) (Note: four FORTRAN continuation cards have been used here so that the matrix's components R,T,P, and S (see Figure A-l) are readily discernible. Compare this example to the following one.) CALL NAMTRA ('TRI@',10.,0.,.,.,O.,1.,0., 1 0.0.,0..,1.,0.,10.,-3.,7.,4.,&5)

B-13 NMTRA1 NAME: NMTRA1 FUNCTION: See NAMTRA CALLING SEQUENCE: FORTRAN IV CALL NMTRA1 (TNAME,E,&l) ARGTUMENTS: TNAME - The DRAWL transformation name by which the transformation being defined can be referenced. E - A four-by-four, full-word, floatingpoint array whose values are interpreted as a four-by-four DRAWL transformation matrix (see Avpendix A) RETURN CODES: See NAMTRA COMMENTS: See NAMTRA EXAMPLE: CALL NMTRA1 ('TR2@', ARRAY, &&3)

B-14 TRANSF NAME: TRANSF FUNCTION: Establish the internal associations which will effect a transformation. CALLING SEQUENCE: FORTRAN IV: CALL TRANSF (ENTITY1, ENTITY2, TNAME, &1,&2,&3,&4). ARGUMENTS: ENTITY1 - The DRAWL name which will be assigned to the newly cre:ted entity. ENTITY2 - The DRAWrL!nam of -the e' tit to be tra-nsformed. See -' cautions on usin~: ENTITYI = ENTITY2 in the section on DRAWL names. TNAME - The DRAWL name of the Tran sformIation by which ENTITY2 is to be transformed into ENTITY1. RETURN CODES: &l - The third argument was incorrect: ***DRAWL ERROR —TNAME IS NOT A TRANSFORMATION NAME. &2 - The second argument was incorrect: ***DRAWL ERROR —ENTITY2 IS A TRANSFORMATION NAME. &3 - The second or third arglument \vwas undefined: ***DRAWL ERROR- -ARGUM TEN NOT F017TK BY TRANSF. &4 -ENTITY1 has already been, defiznid-,. this is not a simple redefinition, i.e., ENTITY1 f ENTITY'. (See the section on DRAWL n:ames.) ***DRAWL ERROR-ENTITY1 ALREADY USED AS (OBJECT) (ASSEMBLY) (XFORIi) NAME COMMENTS: The user's attention is directed to the section on DRAWL names.

B-15'1l'l /\N:11,' EXAMPLES: CALL TRANSF ('Al@','Ai&t','ATRI('7, S' &80,, 1 &65,&75) CALL TRANSF ('A1@','A2@','TR3@' ) CALL TRANSF'A17@',' Al@' TR, 4~ &7, &o)

B-16 DI I/\W NAME: DRAW FUNCTION: Produce the drawing of an entity on an off-line, thirty-inch CalComp plotter. CALLING SEQUENCE: FORTRAN IV: CALL DRAW(ENTITY, &l,&2,&3) ARGUMENTS: ENTITY - The DRAWL name of the entity to be drawn. RETURN CODES: &1 - ENTITY was undefined when DRAW was culled. ***DRAWL ERROR - ENTITY NOT FOUND BY DRE&2 - ENTITY is a transformation nmne ***DRAWL ERROR - ATTEMPT TO DRAW TRANSFORMATION "ENTITY" &3 - A perspective transformation operation caused division by zero: ***DRAWL ERROR - ATTEMPLT TO PLACE EYEPOINT IN S ME X-Y PLANE AS POINT TO BE DRAWN. TIE EYEPOINT WAS AT Z=K. COMMENTS: The output switch settings SHFT, NOSHFT, MOVE/NOMOVE, SCAL/NOSCAL are printed.t output time. The VIEWXY, VIEWZX, and VIEWZY switches are also considered, but not printed. The maximum paper size is X —49 and Y =28". ***DRAWL ERROR - ONLY n POINTS/DRAWING means that over n points were requested for the current drawing. The first n points will be drawn and DRAWL execution will proceed. The current upper limit n can be found in the DRAWLNEWS file. Users should realize that it is only when DRAW or another of the output routines is executed that transformations are performed. If a drawing must be scaled to fit onto the output device, the scale factor is prinlted. DSRN 8 is used by DRAW to build a file ofL CalComp plotter commands. If DRAW is called, DSRN 8 must not be referenced by the user's program. See the MTS FORTRAN Users' Guide for more information on DSRN's ( Data Set

B-17 DRAW Reference Numbers.) EXAMPLES: CALL DRAW('OBJ@',&1, &:) CALL DRAW CASM"',&99())

B-18 SHOW NAME: SHOW FUNCTION: Display an entity on a cathode-ray-tube display. CALLING SEQUENCE: FORTRAN IV: CALL SHOW (ENTITY,&l,,, &3 &4) ARGUMENTS: ENTITY - The DRAWL name to be displayed on the CRT. RETURN CODES: &1 - ENTITY was undefined wheil SHOW was called. ***DRAWL ERROR ENTITY NOT FOUND BY SHOV &2 - ENTITY is a transformation name. *X*DRAWL ERROR _ATTEMPT TO SHOW TRANSFORMATION "ENTITY'. &3 - See DRAW. 4 - Because NOSCAL or NOSHFT;-as set, the picture is being drawn off the sczeen. ***DF - OFF THE SCREEN. COMMENTS: Return code four cannot be reached unless SHFT or SCAL were turned off before SHOW wa. called. SHOW is terminated the first time a point is drawn off the screen. The screen dimensions are 9-375" square. (0,0) is in the lower left-hand corner. DSRN 9 is used by SHOW to transmit display files to the CRT If SHOW is called, DSRN 9 must not be referenced by the user's program. Also see the comments under DRAW. EXAMPLES: CALL SHOW('PICT@',&l) CALL SHOW('FIGURE@',&3,&6, &o) CALL SHOW (FIGl@')

B-19 PRTPLT NAME: PRTPLT FUNCTION: Produce a "drawing" on an on-line standard line-printer. CALLING SEQUENCE: FORTRAN IV: CALL PRTPLT(ENTITY,&1,&2) ARGUMENTS: ENTITY - the DRAWL name of the entity to be plotted on the line printer. RETURN CODES: See DRAW, substituting "PRTPLT" for "DRAW". COMMENTS: These plots are not as accurate or informative as other output modes. Since they are printed along with other printed DRAWL output, they are inexpensive and waits for their production are not required. The plot will be one standard printer page, but true dimensions are not preserved. The plot is scaled to the 28" by 49" standard CalComp (under DRAW) size, and then scaled again to fit the printers page size. Also see the comeiints under DRAW. EXAMPLES: CALL PRTPLT('Z@' ) CALL PRTPLT ('DRAW@',&3)

B-20 PRTOUT NAME * PRTOUT FUNCTION: Print the switch and (X,Y) values for each point in the entity on the line printer. CALLING SEQUENCE: FORTRAN IV: CALL PRTOUT(ENTITY, &1,&2) ARGUMENTS: ENTITY - The DRAWL name of the entity whose points are to be printed. RETURN CODES: See DRAW, substituting "FRTOUT" for "DRAW" COMMENTS This is the least expensive entitty outui-. method. Also see the comments tfor FRTFLT and DRAW. The values are scaled to standard CalComp output size, 23" by 49". Also see the comments under DRA-W. EXAMPLES: CALL PRTOUT ('ENT1@',&3) CALL PRTOUT('FINAL@' )

B-21 PRTPUT NAME: PRTPUT FUNCTION: Write the switch and (X,Y) values for each point in the entity on a storage device. CALLING SEQUENCE: FORTRAN IV CALL PRTPUT(ENTITY, LDN,&1, &2) ARGUMENTS ENTITY - The DRAWL name of the enltit-y hose points are to be saved on a line file, sequential file, magnetic tape, or punched cards. LDN - The full word integer Logical Device Number (or Data Set Reference) to which the storage device is attached at run time. RETURN CODES: See DRAW, substituting "PRTPUT" for "DRAWI" COMMENTS: The device must be attached to the LDN (DSRN) at RUN time. If DRAW is called in the program, Data Set Reference N-mber S musl not be used by PRTPUT. If SHOW is called, DSRN 9 must not be used. These DSRN's are used by these subroutines for data transmission. Values are scaled to standard CalComp output size: 28" by 40". For further information on DSRN's, see the MTS FORTRAN Users' Guide. Also see the comments under DRAW. EXAMPLES: CALL PRTPUT('NAME@',3,&5) CALL PRTPUT( NAME2@', I)

B-22 DISPLA NAME: DISPLA FUNCTION: Produce a drawing of an entity on a ten-inch on-line CalComp plotter attached to a DEC-338 CRT display. CALLING SEQUENCE: FORTRAN IV CALL DISPLA(ENTITY,&1,&2) ARGUMENTS: ENTITY - The DRAWL name of the entity to be drawn. RETURN CODES: See DRAW, substituting "DISPLA'" fr "DRAW'' COMMENTS: This routine functions only when the usir is operating in interactive mode from a ter minal equipped with a plotter. The drawing sire is 10" by 30". Also see the conunents under DRAW. EXAMPLE: CALL DISPLA('OBJECT@',&l)

APPENDIX C DRAWL Output Parameters

C-1 Table C1. Default settings for DRAWL RUN parameters Parameter Default value Page Drawing Scaling SCAL C-2 Drawing Shifting SHFT C-3 Paper Advance MOVE C-4 Viewing Plane VIEWXY C-5 Descriptive Printing Batch: PRNT C-6 Interactive: NOPRNT C-6 Pagination Batch: PAGE C-7 Interactive: NOPAGE C-7 Error Handling: RETURN D-3

C-2 SCAL NOSCAL NAME: SCAL, NOSCAL FUNCTION: Turn drawing scaling on (SCAL) and off (NOSCAL). CALLING SEQUENCE: FORTRAN IV: CALL SCAL CALL NOSCAL DEFAULT SETTING: SCAL is on. COMMENTS: If an entity is too large to fit onto tlle output device specified for the drawing, the drawing will be scaled (if SCAL is on) to fit onto the device. The devi ce si — s art Off-line Cal Comp P'ot er (CALL DRAW): XMAX=49", YAX=25:" D.E.C. 338 C.R.T. Dislay (CALL SHOW): XMAX=9.375, YMAX=9.375" Line printer or file (CALL PRTPUT, PRTPLT, PRTOUT): XMAX=49 ", YMAX=28 On-line Cal Comp Plotter (CALL DISPLA): XMAX=30", YMAX=IO" If NOSCAL is on, and the device size is exceeded, windows of the above sizes are effected, except for SHOW, where the draz:ing is terminated the first time the fevice si-e is exceeded: *DF-OFF THE SCREEN Each call to INIT restores.he default value. Setting SCAL on turns NOSCAL off. Setting NOSCAL off turns SCAL on.

c-3 SHFT NOSH-IFT NAME: SHFT, NOSliFT FUNCTION: Turn drawing shifting on (SHFT) and off (NOSHFT) CALLING SEQUENCE: FORTRAN IV: CALL SHFT CALL NCSHFT DEFAULT SETTING: SHFT is on. COMMENTS: If a drawing has any negative coordinate values, it will be shifted onto tile positive X-Y plane (if SHFT is on). PRTOUT, PRTPLT, and PRTPUT allow negative values, but also use SHFT as their default setting. Used in conjunction with SCAL, it allows any drawing to be displayed in its entirety. If negative values are sent to a device while NOSHFT is on, a window7 will be effected at X=O, Y=O, except when SHCOW is specified. SHOW will be terminated at the first negative coordinate encountered: **DF-OFF THE SCREEN Each call to INIT restores thie default value. Setting SHFT on sets NOSHFT off. Setting NOSHFT on sets SHFT off.

~~~c-4^MOVE NMOVE NOMOVE NAME: MOVE, NOMOVE FUNCTION: Allow drawings to be overlaid (NOMOVE is on) or produce the drawing on a fresh output surface (MOVE is on). CALLING SEQUENCE: FORTRAN IV: CALL MOVE CALL NOMOVE DEFAULT SETTING: MOVE is on COMMENTS: MOVE and NOMOVE do not affect PRTOUT, PRTPLT or PRTPUT. Separate drawings are generally scaled and shifted by different values if DRAWL scales or shifts them (see SCAL and SHFT output options.) Users sh old be s2re overlaid drawings are altered by t se amount (or not altered at all). If DRAW is called when NOMOVE is in -efect PLTEND must be called before prolam term'ination, or before the next call to MO. whichever occurs first. In the example below, A and B will be overlaid, while C will be drawn separately. The default is restored by each call to INIT. Setting MOVE on sets NOMOVE off. Setting NOMOVE on sets MOVE off. EXAMPLE: CALL NOMOVE CALL DRAW('A@' ) CALL DRAW('B@') CALL PLTEND CALL MOVE CALL DRAW(c'0')

C-5 VII.:WXY V l INW X,:; V i J:W:;Y N.ME: VIEWXY, VIEWXZ, VIEWZY FUNCTION: Set the VIEW SWITCH, which selects front, top, or right-side views for drawings, respectively. CALLING SEQUENCE: FORTRAN IV CALL VIEWXY CALL VIEWXZ CALL VIEWZY DEFAULT SETTING: VIEWXY is on. COMMENTS: Each call to INIT sets VIEWXY on. The view switch is reset only by calling VIEWXY, VIEWXZ, VIEWZY, or INIT. EXAMPLE: To produce all three views of an entity and reset the view switch: CALL DRAW('A') CALL VIEWXZ CALL DRAW (A' CALL VIEWZY CALL DRAW( A' ) CALL VIEWXY If the entity is properly translated betwee] calls to DRAW, three-view drawings can be produced in conjunction with NOMOVE.

PRNT NOPRNT NAME: PRNT, NOPRNT FUNCTION: Turn DRAWL execution time printin l Cn (PRNT) and off (NOPRNT). CALLING SEQUENCE: FORTRAN IV: CALL PRNT CALL NOPRNT DEFAULT SETTING: Batch users-PRNT is on. Terminal users-NOPRNT is on. COMMENTS: Error comments are not supressed by NOPRNT. Warning comments are supressed. The default is restored by each call to INIT. Setting PRNT on turns NOPRNT off. Setting NOPRNT on turns PRNT off.

C-7 PAGE NOPAGE NAME: PAGE, NOPAGE FUNCTION: Turn pagination* on (PAGE) and off (NOPAGE) CALLING SEQUENCE: FORTRAN IV CALL PAGE CALL NOPAGE DEFAULT SETTING: Batch Users - PAGE is on. Terminal Users - NOPAGE is on. COMMENTS: Batch users who wish to do printing in addition to DRAWL's printing, and who do not want to use LCOUNT to maintain pagination can turn pagination off. Headers will not be printed. Pagination can be restored at any time, but page numbering will be continued from where it left off. Setting PAGE on sets NOPAGE off. Setting NOPAGE on sets PAGE off. * Pagination is the maintenance of a page count by DRAWL, and the printing of a header and current page number at the top of every fresh page printed. The header includes the DRAWL version number, user I.D. number, date, time, and page number.

APPENDIX D Special DRAWL routines

SPECIAL POINTS SPECIAL INCRPT Several special calls for POINTS and INCRPT are provided. I. Absolute Coordinates Special POINTS entry: Equivalent to calling: VISA(X,Y,Z) POINTS(1,X,Y,Z,1.) INVA(X,Y,Z) POINTS ( 0,X,Y,Z, 1.) VISA2(X,Y) POINTS(1,X, Y, 0.,1. ) INVA2 (X, Y) POINTS (0,X,Y,0.,1.) II. Incremental Relative Coordinates Special INCRPT entry: Equivalent to calling: VISR(X, YZ) INCRPT(1,X,Y, Z,1.) INVR(X,Y,Z) INCRPT (O,X,Y, Z,1. ) VISR2 (X, Y) INCRPT(1, X,Y, O.,1. ) INVR2(X,Y) INCRPT(O,X,Y,O.,1.) The usual return codes and error messages for POINTS and INCRPT also apply to these special calls. EXAMPLES: CALL VISA(3., 4..,9.,&6) CALL VISR2 (A,12.) CALL INVA2(6., 7.,&1) CALL INVPR2(2.15, COS (ALPHA), &10) CALL INVA(10.,A,A)

RETREV TDUMP NAME: RETREV FUNCTION: Print the values of the DRAWL transformation matrix, -oject, or assembly named as argument. CALLING SEQUENCE: FORTRAN IV: CALL RETREV(NAME,&1) ARGUMENTS: NANE - The DRAWL name of the transformation matrix, object, or assembly to be retrieved. RETJJpN CODES: &1 - An undefined name was used as argument to ETREV: ***DRAWL ERROR-.AM NOT FOUND BY RETR COMI NTS: RETREV prints the values DRAWL has associate with the DRAWL names used in a run. It is especially useful in debugging. CALL TDUMP calls RETRE for every DRAWL name in the program. When TDUMP is called just before program termination, a complete traceback through the DRAWL storage hierarchy is provided. TDUMP has no arguments or return codes. EXAMPLES: CALL RETREV('Tl@' ) CALL RETREV('ASM' ) CALL TDUMP

D-3 ABORT NAME: ABORT FUNCTION: Designates the error-handling procedure to follow upon encountering errors. CALLING SEQUENCE: CALL ABORT(ACTION, N) ARGUMENTS: ACTION - The type of action to be taken upon encountering the Nth error. ACTION may be:'QUIT@' - Sign the job off the system.'SYSTEMW' - Terminate DRAWL execution but do not sign off.'MTS@' - Terminate execution, but dc do not unload DRAWL. DRAWL may be restarted with $RESTART'RETURN@' - Continue to use the error exits, continue execution. N - The number of errors allowed before action is requested. RETURN CODES: None DEFAULT VALUES: ACTION -'RETURN@' N = 100 COMMENTS: All errors listed under'bRAWL Error and Warning Messages" are included in the error count. In general, terminal users should not use QUIT, and batch users should not use MTS. If ACTION is an unrecognizable string, RETURN will be assumed: ***DRAWL ERROR - ACTION IS AN ILLEGAL ARGUMENT FOR ABORT. "RETURN" ASSUMED. EXAMPLES: CALL ABORT('QUIT@', 3) CALL ABORT ('SYSTEM',1 )

D-4 CMBMAT NAME: CMBMAT FUNCTION: Name and initiate the formation of combined DRAWL transformation matrices. CALLING SEQUENCE: FORTRAN IV: CALL CMBMAT(NAME) ARGUMENTS: NAME - The DRAWL, name of the transformation matrix to be formed. RETURN CODES: None. COMMENTS: CMBMAT ( CoMBineMATrices: ) is used in conjunction with the single transformation matrix defining functions. Termination of the list of functions is signalled by a call to ENPCMB, which calls NAMTRA. The permissible single transformati matrix defining functions are: NAME EFFECT ARGUMENT..R. P, Y..Z TRLATE(X, Y, Z) Translation The X,Y, and Z values (in inches) for the translatio row of the transformation matrix. CSCALE(W) Scaling The sixteenth entry in the transformation matrix. PERSPC(S) Perspective The location on the Z axis (in inches) of the eyepoir. ROTX(R) Rotation about The aount of rotation the X-axis (in radians) ROT1(R) Rotation about The amount of rotation the X-axis (in radians) ROTXD(D) Rotation about The amount of rotation the X-axis (in degrees) ROTY(R) Rotation about The amount of rotation the Y-axis (in radians) ROT2(R) Rotation about The amount of rotation the Y-axis (in radians)

D-5 CMBMAT ROTYD(D) Rotation about The amount of rotation the Y-axis (in degrees) ROTZ(R) Rotation about The amount of rotation the Z-axis (in radians) ROT3(R) Rotation about The amount of rotation the Z-axis (in radians) ROTZD(D) Rotation about The amount of rotation the Z-axis (in degrees) Each single transformation matrix defining function generates a fourby-four matrix according to the following table: TRLATE(X, Y,Z) CSCALE(W) 1. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 1. O. 0. 0. 0. 1. 0. 0. 0. 1. 0. X Y Z 1. 0. 0. 0. W ROTX(R), ROT1(R), ROTXD(R*360./6.28) ROTY(R), ROT2(R), ROTYD(R*360./6.28) 1. 0. 0. 0. COS(R) 0. -SIN(R) O. 0. COS(R) SIN(R) O. 0. 1. 0. 0. 0. -SIN(R) COS(R) O. SIN(R) O. COS(R) O. 0. 0. 0. 1... O. 1. ROTZ(R), ROT3(R), ROTZD(R*360)./6.28) PERSPC(S) cOS(R) SIN(R) O. 0. 1. 0. 0. 0. -SIN(R) COS(R) O. 0. 0. 1. 0. 0. 0. 0. 1. O.. O.. 1. -1./S 0. 0. O. 1. 0. 0. 0. 1. CMIBMAT names a transformation matrix which is the product of the specified single transformation matrix defining functions' matrices. The following sequences are equivalent: (A) CALL CMBMAT('A@') CALL NAMTRA('A@',1.,0.,0.,0., CALL TRLATE(1.,2.,3.) and 1 0.,1.,0.,0., CALL ENDCMB 2 0.,0.,1.,0., 3 1.,2.,3.,1.)

CMBMAT (B) CALL CMBMAT('B@') CALL NAMTRA('B@',1l., 0.,0.,0 CALL CSCALE(5.) 1 O.,1.,0.,0. CALL PERSPC( 10.) and 2 0.,0.,1.,-1/10., CALL ENDCMB 3 0.,0.,0.,5.) To generate a matrix named MAT1 which will 1) Translate three inches in X, 2) Rotate 35 degrees about the X-axis 3) Translate four inches in Y and two inches in Z, 4) Perform a perspective transformation, with the eyepoint at X=O, Y=0, Z=-35 inches, the following sequence could be used: CALL CMBMAT ('MAT' ) CALL TRLATE(3.,0.,0.,) CALL ROTXD(35.) CALL TRLATE(0.,4.,2.) CALL PERSPC(-35.) CALL ENDCMB The single transformation matrix defining functions can also be used to implicitly name DRAWL transformation matrices. Using the name and argument of any of the functions as the third argument to TRANSF will name and produce a transformation matrix as specified by the function with the newly generated matrix. The transformation matrices defined in this manner are usable only once, although they are in storage until termination of the run. For example: RAD=DEG*6.28/360. CALL NAMTRA('ZROI@',COS(RAD),SIN(RAD),O.,0., 1 -SIN(RAD),COS(RAD),O.,0., 2 0., 0., 1.,0. 3 0., 0., 0.,l.) CALL TRANSF('OBJ@','OBJl@',' ZROT@ ) is equivalent to: CALL TRANSF('OBJ@',' OBJ1@', ROTZD(DEG)) Note that the function name is not enclosed in primes.

D-7 LCOUNT NAME: LCOUNT FUNCTION: Allow accurate pagination by DRAWL in batch mode when users do printing in addition to the DRAWL processor's. CALLING SEQUENCE: FORTRAN IV: CALL LCOUNT ARGUMENTS: N - The number of lines about to be printed by the user's FORTRAN IV PRINT or WRITE statement (including carriage control). RETURN CODES: None COMMENTS: DRAWL's pagination algorithm maintains a count of the lines printed per page. When a page has been filled, the counter is reset to zero, a page-eject is given, and the header printed. If there are less than N lines left on the page, a page-eject is given before the printing is done. LCOUNT has no effect if NOPRNT is on (whether explicitly set or by default). At most 56 lines are allowed on a page. CALL LCOUNT(57) gives a page-eject and header before printing. EXAMPLES: DO 10 I=1,5 CALL LCOUNT(1) PRINT 17, X(I),Y(I) 17 FORMAT(3X,2F4.1) 5 CONTINUE CALL LCOUNT(2) PRINT 99 99 FORMAT ('O TWO LINES PRINTED (COUNTING *CARRIAGE CONTROL)' )

APPENDIX E DRAWL Error Messages

DRAWL Error Comments Two classes of error comments are implemented in DRAWL — Warnings and Errors. Many errors which would ultimately cause program termination are intercepted and corrected with "educated guesses." For example, missing decimal points are inserted, and zero scale factors changed to one. Each time such an error is intercepted, "***DRAWL WARNING - ", followed by a description of the error, is printed. When errors are made which cannot be easily second-guessed, "***DRAWL ERROR -", followed by a description of the error, is printed. Whenever a DRAWL name is the cause of an error, it is printed in hexadecimal along with its character representation, so that, for example, the letter 0 can be distinguished from the digit zero. Note that each error and warning adds to the count maintained by subroutine ABORT (see the ABORT description in the Appendix.) A. DRAWL WARNINGS 1. SCALE FACTOR OF ZERO. CHANGED TO ONE. (NAMTRA, POINTS,NMTRA, INCRPT, CMBMAT entries) 2. THERE IS NOTHING TO USE AS BASE FOR RELATIVE OR INCREMENTAL CALL (0.,0.,0. ) ASSUMED. (INCRPT, NAMOBR) 3. ILLEGAL CALL TO [FINASM] [FINOBJ] [ENDCMB]. [FINOBJ] [ENDCMB] [FINASM] CALLED FOR YOU. ([FINASM] [FINOBJ] [ENDCMB]) 4. UNEXPECTED DECIMAL POINT FOUND. XX.YY CHANGED TO XX (POINTS, INCRPT) 5. EXPECTED DECIMAL POINT MISSING. XX CHANGED TO XX.O (POINTS, INCRPT, NAMTRA, NMTRA1, CMBMAT entries) 6. FAILURE TO FINISH OBJECT A, FINOBJ CALLED FOR YOU. (Any DRAWL routine except POINTS, INCRPT, FINOBJ) 7. FAILURE TO FINISH ASSEMBLY A, FINASM CALLED FOR YOU. (Any DRAWL routine except NAME, FINASM) 8. FAILURE TO END CMBMAT A, ENDCMB CALLED FOR YOU. (DRAWL routines other than single transformation matrix defining functions or ENDCMB.) 9. FAILURE TO CALL INIT. (Any DRAWL routine other than INIT.)

10.'STRING' IS AN ILLEGAL ARGUMENT FOR ABORT. "RETURN" ASSUMED. (ABORT) B. DRAWL ERRORS. 1. OVER 1000 POINTS WERE SPECIFIED. TERMINATING VIA "ABORT" SPECIFICATIC (POINTS, INCRPT) 2. OVER 200 NAMES WERE SPECIFIED. TERMINATING VIA "ABORT" SPECIFICATION. (NMBJAMOBJ, NAMASNAMTRA, NMTRA1, CMBMAT TRANSF ) 3. OVER 5000 LINKAGES WERE SPECIFIED. TERMINATING VIA "ABORT" SPECIFICATION. (NAMTRA, NAMOBJ, TRANSF, POINTS, INCRPT, NMTRA1) 4. POINTS CALLED WITH NO NAMED OBJECT VIA NAMOBJ. (POINTS, INCRPT) 5.' STRING' ALREADY USED AS OBJ/ASM NAME. (NAMTRA, NMTRA1, CBMAT ) 6. NAME CALLED WITH NO NAMED ASSEMBLY VIA NAMASM. (NAME) 7. TRANSFORMATION'STRING' USED AS ARGUMENT TO NAME. (NAME) 8.'STRING' NOT FOUND BY NAME. (NAME) 9.'STRING' IS NOT A TRANSFORMATION NAME. (TRANSF) 10.'STRING' ALREADY USED AS [OBJECT] [ASSEMBLY] [XFORM] NAME. (TRANSF) 11.'STRING' IS A TRANSFORMATION NAME. (TRANSF) 12.'STRING' NOT FOUND BY TRANSF. (TRANSF) 13. ATTEMPT TO [DRAW] [SHOW] [PRTPLT] TRANSFORMATION'STRING'. ([DRAW] [SHOW] [PRTPLT])

14.'STRING' NOT FOUND BY [SHOW] [DRAW] [PRTPLT] ([SHOW] [DRAW] [PRTPLTJ) 15. ONLY 2730 POINTS/DRAWING ALLOWED. ([SHOW] [DRAW] [PRTPLT]) 16. ATTEMPT TO PLACE EYEPOINT IN SAME X-Y PLANE AS POINT TO BE DRAWN. THE EYEPOINT WAS AT Z=K. ([SHOW] [DRAW] [PRTPLT]) 17.'STRING' NOT FOUND BE RETREV. (RETREV, TDUMP) 18.'STRING' ALREADY USED AS DRAWL NAME. (NAMASM, NAMOBJ, NAMTRA, CMBMAT)

APPENDIX F Sample DRAWL Programs

t.-i C 1 h IS DR A^ L Pki at N ki.. C LL S k t' I C t L: h t A C t iNGULA!;C ARALLLLUPFf L (aS IN FIC, P ) CALL I h 1 C CtL^ L A N C JEC 1 CALL INACfL;J (t'LC IPAa ) CALL L f\ I CALL PLI\7S(C.,.,C. t 1 * ) CA/LL PL 1 I $ ( 1 v * 1. 1 ) CAL L FCI lS(1, (.,., 1.) CALL FCINI (1, i. 2, 1." 1 ) CALL FCIN1JS(, t.,C.t.,l.) CALL PC I N S1( 1 *..t. \ 1. ) CALL PC NI S 1, 1.,2..., 1. C A L L PC I I S(,b..,.,1. CA LL P C I Tl ( 1 ( l. -t.' 1 A ) CALL FOI 1 ( 1 t.. C., 1 ) C LINE c ( FIL. 2) 15 "INVI1 Lt:' - IFE Sit'C IS Z=hL, C A L P L1 \ I ( C. 4,_ C. LC.. 1 ) CALL FC L il ( 1,4.'?.,. ) CALL PCF I S (1,.,2 *,8.1 ) CALL PC [Nl S((,.,'.,8.,1. CALL P 1S(C, 1.,., t., l.) C; I.L F L II S ( 1 C.,2.,., 1. ) _, _..__ L L F ~__ _ k 1 ~ ( -..___ _ 1 _..)_ _._, __!_,_ _................ C I I Sh L CL i tC I CALL F I Lt J C L i A IT. S t C. f -1 C/LL Ck ( t L TF tk'. ) C I:A T V.AS IT- >- - FiUjcCTICi\ C THE t c lECT C RIL-:':) IL IT, C1.._ -.I LW F LJL i (. i E: i S lN r._L' t I. _l t... II. C PL [AT IT tEbCLLI iT -AX C c. LS IiC FC L C(tRS th T F:: C FCI<T\iA' L L. L TfAhL El'. a< LS IFE vAq Il f.I A I[ T II LA C T-AN iF iT iAS ALL Ci LNf L t<l. - T T It FJFiT rAf, S SIN ArUC C(i s C L F NCTI IC! j k S R 4AiAhi AMl; N L LLtit 5..,a__ ALS3C= (c. /3L. -.. 3 S - LALL NL n i f ('', CL CS ) CN. ( -SI N ( lS ),'. 1 C, 1 i. o 2 SIN(r /LS3dC), C., Ct!US (A[S3C), (. C Ai L T k N S F k E C I P R F P a4 C., U.,., 1. ) kAlSqb= ( 6.2 / jt.C * ) *4b 5. ___ __ C NC ^t(-TAIt lkr.L lLC LCLJE l1 Al Ll I L X- XIS L.A.L NL r i F ( L' X.', 1.,' t * 1 C., CLt(:; (ACS.,5 S1\<(RCS45), I., 2 C.,' I NF iACS45), L CSi' (ACS,4 ),.t _ C. L3 c, 1. ~ 3, 1. ) C ALL L t h_ ( r [ L i. t _, f. L (1 _. C I A.. C LF r E T i T iL ( Lf I f l C t CL C (Sc E L; FIC. -' ) CALL LCi ( tC I Ft Ia S1P EN C

F-2 Ln n) LA -J I-J o Figure F-i c3 y/ 0 0 Pi P-1~~~

F-3 \\/x ~~~~~~\ ~~~~~~~~~~~~~~~~\\ \k Figure F-2,/ _ —

Ct I N IL tI k HA l\ 1 SIAIL.N1, L (f A LRA h A C L I:CLI-: ( X- ) +(Y -4 );, =, X -. -4 YC-=4 FVi3.. i.L._iL._ __L__ 1 u.t_ Li-L Sm1. -t__i.....~LPm..IL......._..._... T t 28 t *C.C S=-T CALL I N I CALL NAv'Lt j ( Cl Ca 1 ) C F'v t FEN TL X5, ='7 __ ___ LL_ IN2_ (5. ^..4. ) ____ _... CL 1(CC 1=1,-1 1 =1 S + T 1CC CALL PC I I ( 1,x(+P CC ( I C 1 I S), ),. ) CALL F.1 L J C Nt, PA SPIFtL _____ CALL \PFCJ'LJ F( I' ) _ _______ CALL FCI IN1 (C,,4^,(Q 1 ) C LET'S'tAKE CCLR LC C-S, TJL Ihr(FES AFAP T C E L Z=2 /. Z1=-Lt L CL IC1C 1=l, 1S=-T_ _ __ ________ _ CC 1CiC, i 1,1 Z1=Z 1+CILZ 1S=TS+T 1C 1i. CtLL VI< (I +PR C C S(T ), Y C + S I S I, 1 +E LLZ, 1. CALL F 11L-J C LT.S' P'U- ICLLS TL t' i\CS F.T E _F IL L A. L_._\ APS _ _... C ThE FIk ST L NE IS IN FLACE A.T X=2, = T4, Z=C. LET'S:lUVEt C A CCPY 1U Z=t. CALL NAr I' ('< Z/C fvEa', 1.,C.,C.., 1 * 1C * C *, *.C, JrC..C..I __________ C C t tl )_______ —_-__ _._..... -. C F E kFi< iL'IFN 1SFC F AT tN CA(LL TkANSF ('i,.E C IRCa''C -iC'' CVEii ) C FUT IT ALL 1CCE1FER I NT: AN A/SSEfIVNL CALL NAP'AS P(' CL FL(T' ) CALL N.A' { It' CI ).IA_ _.__Ca L. L'n SFAL _-__ __________. ___ ___.._ __ _____._. CAtL',.ANE l:'E_ F l. C/ I'' ) C P ALL NA Ef L E( IFC') CALL FINAiSP C SCALE IT' L F 1 AtN tE. 1FC i.F aCE, An\LE FC 1ATE IT CALL 1 RAiSF ( uCLILT', C T,c'CL FLT' C L (-1- ) ) CALL TRPN'\LS i PL T l Id'' CLTPLTc' CSCALE2.) ) L..1> L-.lL.L ~-i._.FL...INiiiL.hAT L ILt\ C L._ I. l_. AL- U.V _L L A'.1 A".D S_ ) C N(C lt'LL KL i E t-EFSP:LTI\VE \1 E, E CCI, EP h AT (E C0,-20). ru FL/ CE T E t EELINT AT 2=- C., t ENiR -(-l./2C.) 12 C (SEE APPENCi X ). 11 (CALL NAlT ('P a', 1.,C.,C.,C., 10 1..,r., _ ___-_ ___ __ __ _ _ __ CC.C * I_. 1~ 1. 2C.. C, CC. C 1. ) C7 CLL IT iA\SF ('l ILTIa',' CLT FLT.l_', t, PE.Ri' ) 6 C AiNC SU wE ARE FEAEC 1iC tCA i. ( SEE F IC. -3 ). C.LL CKA('L LTPL i') 3

F-5 -J C3 F 3 rF "I

APPENDIX G The DRAWL 70 Data Structure

G-l DRAWL 70 is written in FORTRAN IV for the IBM 360/67 computer (see Appendix 4 for a listing of the FORTRAN source code). (In the following description, it will be assunmed that the reader can ['oll:ow the FORTRAN code while referring to Figures Gi and G2.) To the user, DRAWL seems like a tree-type data structure (Figure 3). Internally, DRAWL 70 is a two-way linked list, implemented in four logical tables: a points table, linkage table, transformation table (physically combined with the linkage table) and a directory of DRAWL names. An object (see Figure Gl) consists of an entry in the name table (DIREC) with a pointer (IDIREC) to the linkage table (TABLE). A type is assigned with each entry in DIREC-object is type one. (The 360/67 is a drum-paging machine - that is, pages of core storage are swapped onto and off of high-speed drums. If DIREC and IDIREC were physically separate areas in core, one could be paged out without the other. The FORTRAN IV "EQUIVALENCE" statement allows them to be overlaid. Thus if the page containing DIREC is paged in,IDIREC is automatically brought in with it. The same scheme is used for POINT and IPOINT, and TABLE and ITABLE. This scheme may not be as efficient or desirable on other computers.) After an object has been named via NAMOBJ, points are created with pointers in ITABLE to POINT and IPOINT. The actual X, Y, Z, W values are stored in POINT, and the line-type switch is stored in ITABLE. Assemblies are similar to objects in construction. The name is recorded, the type (assembly type = 3) noted, and as NAME is called, pointers are placed in ITABLE. Instead of pointing into POINT, however, they point to the location in DIREC of the entities named in successive calls to NAME. FINASM records the entity count in ITABLE. Transformations (type = 2) have pointers into ITABLE. Their sixteen values are stored in TABLE. Their ITABLE entries are only types and back-pointers into DIREC. The fourth DRAWL entity type is the transformed assembly or object (type = 4). The name and type are recorded in DIREC, and two pointers are placed in ITABLE- the locations in DIREC of: 1) The source entity (second argument to TRANSF), 2) The transformation being used (third argument to TEANSF). The usual back-pointer from ITABLE to DIREC is also maintained. Figure G2A shows TABLE and DIREC after the following sequence has been executed: CALL NAMOBJ ('') CALL POINTS (SW1,...) CALL POINTS(SW2,...)

G-2 POINTS TABLE LINKAGE TABLE DIRECTORY X I *X I *^""< —-- |F I —- -- " OBJECT NAMEI Y OF L+N I # O TYPI PE= ____ Z I-L — - SW I _tory for an a I S______ W t_ L+N + --- ITYPE=2 TYPE=2 16 MATRIX shNOTE: I_ ELEMENTS L__ ELEMES SUB-ELEMENT --..ASSEMBLY NAME 1) The entries in the direc- TYPE= elements are not necessarily will 134 in contiguous ap storag e as / / shown. LEMENTi SUB-ELEMENT 2) The name of a transformed YPE entity (type 4) will 34 | always appear after the....EL SUBEEMENT names of the associated transformation and source entity. The three names TYPE= associated with a trans- -1 3 4_____ formed entity are notSUB-ELEMENT usually in contiguous storage as is illustrated. TYPE= _ lrYPE=4 *. TRANSFORMATION TYPE=2 l —--- "SOURCE ENTITY" NAME TYPE= I 1,30R4 ENTITY NAME TYPE=4 Figure GT1. DPAWL Data Structure.

G-3 LINKAGE TABLE DIRECTORY 2TABS D I 1 I T 2 3 ( SWI N E RT __ ) 3 "^ -- -, 4 m SW2 1 ~_ 4 5. i 5 6 2~ 2 04 —-'_____ 6 16 ENTRIES (a) LINKAGE TABLE DIRECTORY 1 ire G-. t 1n O__ —-- OpaQ' (GENERATED)J, Y PTS I 1, 2 SW2 2 4 16 ENTRI E (b) -. i^iure G-2. InTtenrnal Operation of TR'i \3'A.

CALL POINTS(SWN,...) CALL FINOBJ CALL NAMTRA(T@',Al,...,A16) Execution of the DRAWL command: CALL TRANSF('Q','','T@') changes the system to appear as in Figure G2B."Q" now refers to a transformed object, and all references to it in the future will cause the transformed entity to be used. There is no explicit way to refer to the values originally associated with "Q". (The reader is encouraged to work his way through the above commands with Appendix H. working out all the subscript computations).

APPENDIX H DRAWL 70 Listing

H-1 BLUCK DATA C ATABL CLNTAINS ThE PCINT, NAME, ANG LINKAGE TABLES C CURRENILY, TI-E LINKAGE TABLE ALSC CCNTAINS THE VALUES C FOR TRANSFCRMA1ICN MATRICES ANC SWITCH SETTINGS FOR POINTS CCPMMN /AT7 EL/ I IREC 800),PCINT (ICCC, TABLE( 000) C C VAR CCNTAINS PARAMETERS FCR TFE TABLES IN ATABL C PTMAX IS ThE MAXIMUM NUMB[R CF PCINTS ALLOWED C PTPTR IS THE INDEX FER ARRAY PCINT C TABMAX IS 1TE LPPER DIMENSICN FCR ARRAY TABLE C TABPTR IS TFE INDEX INTC TABLE C GIRMAX IS'THE LPPER LIMIT FCR tAFAY CIREC C DIRPTR IS THE INDEX INTC CIREC C PTCTR IS THE NLMBER LF P INTS IN AN OBJECT DEFINITION C PT IS AN INTERIM COUNTER FCR PCINT DEFINITION C ITP IS ALSC AN INTERIM CCLNTER FOR PGINT DEFINITION C TPTCTR COUNTS THE TCTAL NUPMER CF FCINTS DEFINED IN A RUN C OPEN IS LSEC TC CHECK TFAT ENTITIES, CNCE CPENED, ARE C CLLSEC, AND THAT INIT IS CALLEC C NASM CCUNTS THE NUMBER CF ENTITIES INCLUCED IN AN C ASSEMBLY DEFINITILN UNDER NAPASP C GENNAM IS THE CHARACTER STRING LSEC FCR GENERATED C NAMES FCR LSE BY TRANSF C NSCAL IS TFE GLCBAL SWITCh SET BY SCAL AND NOSCALE C NMOVE IS ThE GLOBAL SITCH SET BY POVE AND NOMUVE C NSHFT IS ThE CLCBAL SrITCF SET HY SHFT AND NOSHFT C LNM KEEPS TRACK OF ThE NUMBER CF CRAWINGS PER RUN C NPRT IS ThE GLCBAL PARAMETEN SET eY PRNT AND NOPRNT C BATCH IS TFE GLLBtAL SWITCh SET BY PAGE AND NUPAGE COMMON /VAR/ PTMAX,PTPTR,TAEMAX,ITAEPTR,DIRMAX,DIRPTR, *PTCTR,PT,ITP,TPT CTR,CPEN,NASMC ENNAM,NSCAL,NMOVE,NSHFT *,LNM, NPRT,BATCH C CLSE HAS TL CO WITH ERRCR CHECKING IN SUBROUTINE CLOSE C AND FINISHES THE CMBMAT...ENLCMB SECUENCE BY CALLING C NMTRA1 WITH TC AS ARGUMENT CCMMON /CLSE/TC (,4, XNAEE, I S INTEGER*2 IPCINT (1OCC ), TABLE( C( CC ),PTMAX, PPTTR,TABMAX,TABPTR INTEGER*4 IL IREC,tPEN, D I RMAX,D IRFTF, PTCTR PT, TP TCTR REAL*8 D IREC (4CC ), CBJNAM,GENNAM t XNAME DATA PTPTR,TABPTR,OIRPTR/2,3,2/,TPICTR/1/,GPEN/4/, [SW/C/ DATA PTMAX,TAEMAX,DIRMAX/50CC, (0(.,40C/, GENNAM/'GNAMOOO / LCGICAL NSCAL,tMCVE,NSh FT,NFR T ATCH CATA NSCAL,NMCVE,NSHFT,NPRT/.FALSE.,.TRUE.,.FALSE.,.TRUE./ C IN THIS IMPLEMENTATIGN, TABLE ANC ITABLE ARE OVERLAID; C DIREC ANEC IPEC; AND TABLE AND ITABLE. CN DIFFERENT C MACHINES ThIS IS VARIABLY EFFICIENT. EiU I VALENCE (IPCINT(l ), FOINT(1 ) ),( ITABLE TABLLE 1 ), * (CIREC (1),ICIRC(1 ) END C C INIT C SUBROUTIN INIT C INIr INITIALIZES ALL VARIABLES EXCEPT OPEN (wHICH IS C SET AT LCAC TI tE.) IT DOES NOT ZERO OUT ANY TABLES, BUT C MERELY RESETS ALL THEIR PCINTERS. GLCBAL VARIABLES ARE C ALSO RESET VIA A CALL TC'SPEC'. CCMMCN /APBL/ ICIREC (ECO), PC INT ( 500C),TABLE( 5000)

COMMON /VtR/ PTfX, PTPTRTAEMAX,1tAEPTR,CIRMAX,DIRPTR, *PTLCTR t PT IT PTPTCTR,CPE ~,NASCGENNAM,NSCALtNMOVENSHFT *,NM,NPRT,EATCF C DRWCCM {CRAW CGMMCN') IS tN AREt LSEC FCR COMMUNICATION C BETEEN THE THREE PIECES CF THE CUIPUT ROUTINES. IT PASSES C LIMITS AND -AS ThE CLTPUT ARRAYS. COMMON /CR CCM/CVEC(50 ), CURPAT(5C ) EXP[ RE ( 50 ) I U, IC, I NPTSICMAXICMAX,XMIN,MAX,YMIl,YMAXT( 5460), IT(2730),IL INTEGER*2 DVEC,CLRMATEXPIRE,IC, IC, IT,LENLINE( 48) LOGICAL NSCALtNhCVENSHFTtNFRT,ETCH INTEGER*2 IPCINT (10000, I TABLE( 10CCC,PTMAX PTPTR, TABMAX, TABPTP INTEGER*4 CPEN,C IRMAX,DIRPTR,PTCTRPT, TPTCTRADROF ARRAY(5) EXTERNAL GETFCDFREEFD REAL*8 GEhNAfPPAC,NGNAM/'GNAMCOC't,CIREC(400) EQUIVALENCE ( IPCINT(1),P I NT(l),( ITABLE(1 1 TAbLE( )) * (DIREC(,tICIREC(1) ) C SPEC SETS MANY OF THE GLCEAL S ITCtIS TO THEIR DEFAULT C VALUES. IT IS IPPLEMENTEC IN TFIS AfNNER S THAT THOSE C wHO DC NCT WISt TU IMPLEMENT TFESE FEATURES CAN SPLIT C THEM CFF EASILY. CALL SPEC C CREPLY DETERMINES hEETI-ER A LSER IS IN CCNVEtSATIONAL C MODE (TFE eRANCF TU 1198 IS NOT TAKEN, AND PAGINATION C AND TRACE PRINTING ARE SUPRESSEC) CR PATCH MCGE (THE C BRANCh TO 11S8 IS TAKEN) CALL CREFLY(E11S8) B ATCH=. FALSE. NPRT=.FALSE. GC TO 199 1198 8ATCh=.TRUE. NPRT=. TRUE. C IF THE USER IS CN A TERMINAL, tE WILL GET THIS ONE HEADER C CNLY CNCE. 1199 IF (ATCh )CC TC 1254 PRINT 12CO 1200 FURMAT('- * * CRAWL - AUG 10, 1I7C VERSION 4 * *) PRINT 12C2 1202 FCHMAT(CCLSERS FEC HAVE NCT CCPIEC StVE:DRAfLNEWS SINCE') PRINT 1203 12C3 FCRMAT(' AUG 10 1970 SF-CULC $CCFY SAVE:CRAwLNEWS' C IDTIME RETLRNS THE USER I.0. NUMBER IN ARRAY(5), THE TIME C OF DAY IN ARRAY(2 AN C (3), ANE 1FE CATE IN ARRAY(4) AND (5) CALL IDTIME(ARRAY) PRINT 1201,APRY (5 })(ARRAY(I, I=1,4) 1201 FCRMAT('OLSER',4,'t INTIATEC DE PL AT,2A4,' ON't2A4//) GC TO 1256 C CHKFIL CtECKS Tu SEE WhET-ER T-E ABBREVIATED NEWS FILE 6.HICH C IS SUPPOSED TO eE PRINTED IS AVAILABLE. IF NOT, THE BRANCH C TO 1256 IS TAKEN. 1254 CALL CHKFIL('SAUE:NEoS',t256) C RCALL ANC CETFE "GET" ThE FILE, tF-ICH CAN BE READ BY C SUBROUTINE REAL AND PRINTED BY SULRCLTINE SPRINT. CALL RCALL((ETFC,2,O,ACRCF('SAVE:NEmS' ),1IFD)UB) C LCOUNT(57) FCRCES A PAGE EJECT. CALL LCCULT(57) 1250 CALL READ(LiNE,LENC, ILM, IFCUe,61255) CALL SPR INT (LINE,LEN,C) GC TC 125C C RCALL ANC FREEFD'FREE UP' TEE NEWS FILE

— 3 1255 CALL RCALL (FPEEF 1, IF CUe, C) C ANOTHER PAGE EJECT. ThL hEkS LElTER IS CN A PRIVATE PAGE 1258 CALL LCLLNT(57) C SET ALL ThE CEFALLT VALUES: 1256 PTPTR=2 FT MAX=49 5 TA8MAX=9<9C C IRMAX=3S E TABPTR = 3 DIRPTR=2 LNIM=0 IFLG=O TPTCTR = 1 CPEN=O CENNAM=NGh Ai CALL VIE0XY T1 )=0. T(2)=0. IT(1 )= hNCVE=.TRUE. hSFFT=.FALSE. NSCAL=.FALSE. RETURN C C TDLMP TRACEEACK FACILIIY C ENTRY TUC F C TDUMP CALLS PETREV FCR EACH t N1R IN THE NAME TABLE. C IT PRCVICfES A I-UORCULlG LIXK-EACK FCR CE BUGGING AND C INSTRLCTICINAL FLRPCSES. IF(BATCH-)CALL LCCUNT(57) IF(BATCH)CALL LCCUNT(2 PRINT 780 78C FCRMAT(' CERAL 1RACEEACK FACILII'N'/') ILIM=DI RPTR-2 DC 783 I=2,ILIt,2 783 CALL RETREV(EIRE((I)) RETURN END C C SPECIAL RCLTINES C SLBRUUTINE SPEC C SPEC SETS TFE CEFAULT GLCEAL S ITCFES WhICh MAKE C LIFE A LITTLE EASIER CCIMEN /ATAEL/ ICIREC(800), FC IN (('CC), frAtL 500 ) CCMMUN /VAR/ FTM/X,PTPTR,TAEMAX, 1AEPTR,DIRMAXDIRPTR, *PTCTR,PT,ITP,TPTCTRCPFE,AS P,GEf APNSCAL,NMOVE NSHFT *,LN, NPR T, BATC LOGICAL NSCAL, tCVE,NSFFT,hFRT,EA T(F, LRET/.FALSE./ INTEGER*2 IPCINT(1COCC),I TABLE(1CCCO),PTMAX, PTP RTABMAXTABPTR INTEGER*4 CPENC IRMAX, C i 1FTR,PTCTR PTTPTCTR, ERRCNT( 30 )30*0/, 1 ARRAY(5), tUPCNI(3)/IOCC,2CO,50CC/,FAGES/O/,NLINE/2/ REAL*8 EPRTYP(3)/' POINTS', NAPES','LINKAGES'/ REAL*8 ARG,GENNAPPACT ITLE(4)/'PtLTURN, 1'(UIT','SYSTEM','ITS'/,CIRECC( 0 ) ECU I VALENCE (I PC IT( 1,P INT(1 ) ),(ITABLE( 1), TABLE(1)), * (OIREC( 1),ICIRE((1) C'PAGES' CCUNIS THE PAGES PRINTEC, NLINE 15 THE CURRENT

=- - 4.. r C LINECLLNT FCR IHIS PACE, LEVABT IS T-E NUMBER OF ERRORS C TO TOLERATE HEFURE STOPPING TFE JOBLERCNT IS THE C NUMBER OF ERRCFS (ANC WARNINGS) ENCCUNTERED THUS FAR, C LABURT IS THE KEY SET FOR TYPE CF TERMI NATION REQUESTED. PAGES=O NLINE=2 LEVABT=1CO LERCNT=O LABORT=1 GC TO 1 C NOSCAL, NCPtVE, ANC NCSFFT CCNlRCL CRA ING SCALINGMUVING, C AND SHIFTING, IN CLNJUNCTICN WiITh SCAL, MCVE, AND SHFT. C PRNT AND NCPRbN CCNTRCL kFETHER TRACE CCMMENTS ARE TC BE C PRINTEC OR NCT. PAGE AND NOPACE TURN PAGINATION C CN AND OFF. ENTRY NOSCAL NSCAL=. TRUE. GO TO 1 ENTRY NCIPCVE NMOVE-=.F tLSE. GC TO 1 ENTRY NOCSFT NSHFT=. TRUE. GG TO 1 ENTRY SCAL NSCAL=.FALSE. GC TO 1 ENTRY MCVE NMUVE=. T RUE. GO TO 1 ENTRY SHFT N SFT=. AL SE. CC TO 1 ENTRY PRNT NPRT=.TRLE. GC TO 1 ENTRY PAGE BATCH=. TRUE. GC TO 1 ENTRY NPCAGE BATCH=.F LSE. GO TC 1 ENTRY NCPFNT NPRT=.FALSE. GC TO 1 C ABORT SETS LABCRT TC TE TYPE CF EXIT TO BE TAKEN ON C ENCOUNTERING TFE N-TF LkRCP (OP eARNING). C EXIT IS VIA RCLTINES'SYSTEM' (STCP AID UNLOAD DRAWL), C'MTS' (SO1P BLT OC NCT UNLOAD CRAWL), ANC'QUIT' (STOP C DRAWL AND IMMECIATELY SICN-OFF TEE SYSTEtM. 0 NOT FINISH C THE JCe.) EN'IRY ABCRT(I RGN) LERCNT-=C LREI=.FALSE. CC 1' I=1,4 IF(PAD(ARG).EC.T I TLEI ))GC TC 12 10 CCN T I NUE PRINT 11,ARG 11 FLRMAT(' ***~CR/AL ARFNING -''',Ae,''' IS AN ILLEGAL ARGUMENT'/

I5 1' FOR ABCRT. "RETURN" ASSUMED.') LABORT=1 GC TO 13 12 LABORT=I 13 LEVA8T=N IF(INET.1)LRET=.TRUE. GC TO 1 C ABORTZ CLULTS (hITH LERCNT TIE NUMBER CF ERRORS AND C WARNINGS ENCCUNTERED. ENTRY ABCRTZ(K) IF(K.GT.C)CC TO 8 PRINT 7, tNMChT(K+4) ERPTYP (K4 ) 7 FORMAT('C***CRAi'L ERRCR - CVER',[4'',A,' WERE SPECIFIE).' / 14X,'TERtINATING VIA "AECRT" SPECIFICATICN'I) GC TO 6 8 L ERCNT=LERCN* +1 ERRCNT(K)=ERFCNT (K)+1 IF(LERCNT.LE.LEV/SET) GC TG 1 PRINT 5,ERRChT C ULTIMATELY, DPR/L WILL SEStE IPFENCING PRCGRAM TERMC INATICN ANC PRINT THE ERRCR SUMMARY FCR EVERYuNEt NUT C JUST ThCSE ktC 4RE FCRCINC TFEPSELVES TO STOP. 5 FORMAT('OCRAhL EPRCR SUMARY:'/3C13 ) 6 IF(LABORT.E. ) I F (LACRT- 3 )2,3,4 GO 10 1 2 CALL QU IT 3 CALL SYS IE 4 CALL MTS GC TO 1 C LCCUNT ('L1NE CCUNT' ) iMAINTAINS CCLNT CF THE NUMBER C UF LIKES PFINTEO CN EACH PAGE. IF THE TOTAL WILL BE FORCED C OVER 57 IF TFE NEXT PRINT IS EXECLT-D, A HEADER IS PRINTEDt C AND T-E CLUNT PESTARTLt C.'PACES' KEEPS TRACK UF THE PAGE C NUMBtR,hk ILE ICTIME GETS TFE TIIE CF CAY FCR EACH PAGE. ENTRY LCCUNT M) I F NL INE+N.GT. 5E )G C TC 58 NL INE=NL IE+N GO TO 1 58 CALL IDTIIPE(ARPAY) PAGES=PAC ES 1 PR INT 5,AfRI Y (5),t Af<RAY ( I), 1= l,4 ), PAGES IF(N.EQ. 7 )N= NL INE=2+ PRINT 56 56 FCRMAT('C') 59 FCRMAT(' 1 CRAL',EX,'G-LEVEL FPCCESSOR (MODEL 08:01)',6X, 1'USER',A4,6X,'IIIE',2A4,6X,'CATE',2A4,12X,'PAGE',13) 1 RETURN END C C NAVCBJ C SUBROUTINE NAmCeJ(UBJNA/I,*) COMMCN /ATABL/ ICIREC 8C ) PC INT( SCCO ) TABLE(50OO ) CUMMCN //APR/ PTMAX,PTPTR,TAeMAX, ABPTR,CIRMAX,DIRPTR, PTCTR,PT, TP, TPTCTR,CPEf, hAS, CGENEAMtNS(AL, NMOVE, NShFT * LNM,1NPR, 1,AIC LOGICAL ISCALt NCV t,NSFTPFTTNPTEA TC

h-6 INTEGER* IPCINT(CCCITALECCC,IT E CC I,PMAX,PTPTR,TABMAX,TABPTR INTEGER*4 ILIREC,UPEN,C I RPAX O IRFTP PTCR, PT,TPTCTR REAL*8 UIREC (4CC ),tJJNAI,GENNAMPAC EQUIVALENCE( IPCI T( 1 ) PCINI(1 ) (I TABLE(1 ) TABLE( )) *(DIREC( It IDIREC1 ) ) C ISW IS SET TC ZERC FOR ENTRY FFPCT NAMCBJ. ISW=O GO rT 14 ENTRY NA C BR GBJ J AM C ISW IS SET TC CNE FUR ENTRY FRCM NAMOBR ISk=1 GC TO 14 ENIRY NAMCCEA(CBJNAM C ISW IS SET TC hINUS ChE FCR ENIRY FRCF hNMG'dA ISW=-1 C CHECK TC SEE IF THIS CALL iAS LECGLLY PLACED (OPEN=O) C IF NOT HAVE SUEPOUTINE CLCSE STRAIGITEN THINGS OUT 14 IFC(PEN.hE.CCAPLL CLCSE C SET'OBJECT OEFINIT ICN UNCERAY' KEY CPEN=1 C CHECK TC SEE IF NAME GK. IF NCTt RETURN I CALL FNGNA( IFINC,PAD(CBJNAI ), ITP,~15) C IREC(DIRPTR )=PAL( UBJNAM ) PRINT 1e, CIREC(EIPPTP) 16 FORMAT('0***4CRAL ERRCR -''1A8,P'' ALREACY USED AS DRAWL NAME') CALL ABCPTZ(3) RETURN 1 C PUT NAFE (PACCEC) INTC NAME TABLE 15 CIREC(OIFPT )=Pt((C(BJNAMV) C SET OBJECT TYPE IN NhAE TAPLE lC IREC ( CIRPTR*2 1 )= 1 C POINTER TC LINKAGE TABLE ICIREC(D IRPTR*2+2)=TABPTR+1 C OBJECT TYPE IN LINKAGE TABLE ITABLE(T APTR+1 ) =1 C BACK PCI-NIER TC NAME TABLE ITABLE(TA BTR)=C IRPTR C PRINT ENTRY FESSAGE IF(BATCH)CALL LCCUNT(2) IF(NPRT)PRINT 1CCCIREC(GIRFTR) 100 FORMAT( OENTRY TC NAMCBJ('',A t82H')) C UPCATE NAPE TAELE INDEX DIRPTR=CIRPTR+2 C IF OVERFLC. IS hERE, GET CLT VIA LSERS SPECIFICATION. IF (IRPTR.C-T.CIRAX )CALL ABCRTZI-2) C INITIALIZE OBJECT PCINT CCUNTER PTCTR=O C ESTABLISH INTERIM CCLNTER FCR LINKAGE TABLE ITP=TABPTR+2 IF( ISW)3C,4C,5C C FOR CALL NAMCEA 30 CALL POIN TS(C,C.,0.,0.1.) PTCTR= 1 GG TG 4C C FUR CALL NAMCBR 5C CALL INCFPT(0,C.,. tO..,1.) C COUNT THIS FIRST POINT IN THE FPOINT TGTAL PTCTR=1 4C RETURN

h-7 ENC C C POINTS C SUBROUTINE PCINTS( [S.XYtZ,h,*) COMMCN /ATAEL/ I IREC( 800), FC INT(50(C, T ABLE( 5000 CCMMUN /VAR/ FTMAXtPTPTRTABAX, lAePTRI RIRAXDIRPTRt *PTCTR PT ITP TPTCTR tCPEN t NAStGENI\NAti,NSCALtNMUVE tNSHFT *LNMNPRT1 eA1CF LOGICAL NSCAL,NMC\/ENSHFT,NRT,BATCF INTEGER*2 I PC INT(1000),ITAELE(lCCCO ),PTMAX,PTPTR,TABMAX,TABPTR INTEGER*4 ICIREC,OPEN,DIRPTAXTCIRPTF,PTCTRPT,TPTCTR REAL*8 CIREC(4C ), UBJNAtvGENNAlvFPAC EQUIVALENCE (IPCINT(1),PCINT(I1,(ITABLE( 1),TABLE(1)), * (DIREC(1)t ILIREC( 1) C IF WE ARE NOT IN OBJECT CEFINITICN VCCE (I.E., OPEN-.=1) C tW DO NCT BELCtG hERE. IFICPEN.EC.1 GC 10 635 IF(BATCH)CALL LCCUNT(2) PRINT 634 634 FORMATI'C***CRAWL ERRCR - FEINTS CALLEC WITH NO NAMED 1'OBJECT VIA NAtCHJ.' CALL ABCFTZ(l) PETURN1 C INCREENT FPCINT CCUNTER 635 PTCTR=PTCTP+1 C TPTCTR IS t "NAI vE" FCR THIS POINT IPC INT (PTPTR*2- 1 =O IRFPTR IPGINT( PTPTR*2)= IPTCTR C PUT THE X VALUE INTC FCINTS. NCTE TFAT ITS TYPE C IS CHECKEC. IT MLST BE A FLOATIN\G PCINT NUMBER. C SIMILAPLY INSERT ThE Y ANC Z VALLES. PT=PTPTR+1 PCINT(PT)=CHECKF(X) PT=PT+1 PCINT(PT ) = C ECKF (Y ) PT=PT+I PCINT(PT)=CFECKF (Z) PT=PT+1 C FAKE SLRE THERE IS NCT A ZERC SCALE FACTCR (W) W1=CHECKF (W) IF(ABS(Wl-C.C.L1..OOCl)GC TO 616 PCINT (PT )=W1 GC TC 617 616 IF(BATCH)CALL LCCUNT(1) IF(NPRT)FRINT 55C 550 FORMAT(' ***hAPNING. SCALE FACTCP CF ZERO. CHANGED TO ONE*) CALL ABCRTZ(l) C IF W WAS ZERO, ASSUME FE FEANT LNE, AND PUT IT IN POINT(PT)=1. C UPCATE THE TOTAL PCINT CCLNTER 617 TPTCTR =TPTCTR +1 ITP = ITP+2 ITABLE( ITP )=PTPTR C PUT THE PENLP/FENi3CWN SWITCf IN TiE LINKAGE TABLE, MAKING C SURE THAT IT IS AN INTEGER (VIP ICI-KF) ITABLE(tITP+1) = IChKF(IS) C UPCATE PCINTS TABLE INCEX PTPTR = PT+1

[ —C MAKE SUREE EE PE NCT REACY TC CVERFLCh THE PCINTS TABLE IF ( PPTP.GT TVA })C ALL ABC TZ(-1 ) RETURN END C C INCPPT C SUBROUTINE INCRPT SIS,X,YZW) CCMMON // TABL/ It IREC(800) PC NT(5CCC),TA LE( 5C00 CCMMON /VAR/ PTXAXtPTPTRTAEMAX, IABPTRCIRMAXDIRPTR, *PTCTR,PT t ITP tTPTCTRf CPEN NA SMGENNA INSCALNM1OVENSHFT *,LM, NPRTETCF LCGICAL NSCAL,NMCVE\,NSFFT,NFRT,ATCH INTEGER*2 IPCINT (100000, ITABLE( 1CCCO ),PTMAX,PTPTR, TABMAX,TABPTR INTEGER*4 IDIREC,OPENODIPIAXDIRFT,PTCTR,Pt,TPTCTR REAL*8 C IRE'C(4( 0) IJNA, GENNAM ECUIVALENCE (IPCINT(1),PC I T(1)) (ITABLE( 1 ),TABLE( 1 ) * ( IREC( 1) tI. IREC ( )) C IF THRERE WERE NC PREVICLSLY CEFINEC PCINTS, wE CAN'T BE RELATIVE C TO THE PREVIOLS VALUE IF(TPTCTR.NE.1)GC TC 1C IF(BATCH )CALL LCCUNT(2 IF(NPRT)FRINT 20 2C FURMAT(' ***tARN ING: T-ERE IS NCTHING TC USE AS BASE FOR', *' RELATIVE CR'*/ INCREMENTAL CALL. (O.,0.t0.) ASSUMED.') CALL ABCPTZ(16) C SO WE ASSU.E FE MEANT TO EE RELAIIVE TO (0O.C.,3. CALL POI NT S( I S tC..,. 0 t 1.) RETURN C GET TFE PREVICLS XtYANC Z VALLES IC IRROW=TPTCTR*5-7 C AND ACC THEM IN X1=TABLE ( IPPCW)+X/W YI=TABLE(IRRCk+1 )+Y/W Z1=TABLE( IRCW+2 ]+Z/W C LET POINTS PUT TFEM INTO THE PCIIT TABLE CALL POINTS( IS,X1IY1,Z1,1. ) PETURN END C C SPECIAL ENTRIES FCR PCINTS C SLBROUTINE VIS t(X,Y,Z) C THESE ARE SELF EXPLANATCRY CALL PCINTS(l,X,t',Z1l. GC TO 1 ENTRY INvA{XY,Z) CALL PCINITS(CXtZ,1.) GC TO 1 ENTRY VISR(X,YZ) CALL INCFPT(1,X,tv,Z,1. GC TO I ENTRY INVR(XYtZ CALL INCPPTI(CXY, Z,1. GC TO 1 ENTRY VISAZ(t,Y) CALL POINTS(1,X,Y,O.,1.) CG TO 1 ENTRY INVA2(X,Y)

H-9 CALL PCINTS(C,X,,O., 1. GL TO 1 LNTIY VISR2(X,Y) CALL INCtPT( 1, X,YO., 1. ~ GC TO 1 ENTRY INVR2(XY) CALL INC.FPT(CX,tO,. 1.,) GC TO 1 t RETURN END C C NAMTRA C SUBROUTINE NAMTR ( BJNAM,AI,A2 A3,A4,A5,A6, A7A8 49, * AlOAllA112tA1,14,P15,A16.*) CLMMCN /ATABL/ I[IREC(8CO), FC INT( C( C )TABLE( 500 ) CCMMON /VAR/ PTMAX, PPTPR,TAEMAX, TAePTRtCIRMAX,DIRPTR, *PTCTRtPT ITPTPTCTR tPENNASt GENNAM tSCAL NMOVEtNSHFT * LNMNPPR1,BATC LCGICAL NSCALNMCVE,NSFT,NFRT,eAThINTEGER*2 IPCINT(1000G),ITAELE(1CCCO),PTMAXPTPTRTABMAX,TABPTR INTEGER*4 ICIREC UPEN,C IRMAX,IRPTR, PTC TR PT,TPTCTR, 2) * TEST/Z6CC CCOO/ REAL*8 DIREC(4CO),OBJNAP,GENNAM,PAC CeJ^M1 ECUIVALENCE ( IPG INT(1),PC INT(1)), (ITA LE( ),TABLE(1)) * (DIREC 1),ICIREC(1)) )(C(1),CBJNP1 C ARRAY E WILL BE LtSC BY NMTRAI DIMENSIC N E (4 4) C IFLG = 0 IF ENIRY WAS VIA KNATRt IFLG=O GC TO 335 ENTRY hNTRAH(CBJNAM,E,*) C If-LG = 1 IF ENlRY WAS VIA NMTRA1 IFLG=1 C CO WE REALLY BELCNG HERE? 335 IF (PEN.NE.C )CALL CLOSE CPEN=O C PAD Ol TFE NAPE PASSEG AS ARGLMENT OBJNM1=PAC (CEJN A ) C WE WILL TRY TC FIND THE NAME TC SEE IF IT C HAS BEEN USEC BEFCRE. (DIPFTR=2 ===> NULL NAME TABLE) IF(DIRPTR. E.2)GC TO 115 C FNDNAM WILL DETERMINE WHETIER TIE NAME HAS BEEN USED BEFORE. C IF THIS IS T-E FIRST CEFIN[TICN OF THE NAME, IT WILL EXIT C TO 115. LTFERWISE, TFE TYFE ASSOCLATEC WITH THE NAME WILL C BE IN ITYP, ANC THE LCCATICN IN CIREC IN IFIND. CALL FNCL hA ( IFINECUBJNM 1, 1 Y P, 6115) IF(BATCH)CALL LCCUNT(2) PRINT ICl OGJNAF C IF IT WAS PREVILUSLY LSED AS AN ENTITY NAME, rHAT'S A FATAL C ERROR. 101 FORMAT('O***ECRAL ERRCR -',*8,8 ALREADY USED AS DRAWL NAME') CALL ABCPTZ(3) RETURN 1 C WE REACHEO THIS PCINT CtNL IF IHIS IS A'NURMAL DEFINITION'. C PUT THE NAPE I1TO ThE hAME TABLE. 115 DIREC(DIRPTR)=CBJNMI1 C OVERFLCW TFE NAME TABLE? IF(UDIRPTR.GTD.OIiAX )GC TO 776

H- 1C C PUT IN TYPE 2 FCR TRANSFCRtATIC(N YPE IDI REC(DIRPT R*2+I = 2 C POINTER INTO L INKAGE TABLE IDIREC (CIPPTR*2*2) TABPTR+l C BACK PCINlER ITALE (TABPTR )=CIRPTR C CHECK ANC SEE thFtTFER TFE FIRST CHARACTER IN THE NAME IS C A PERCENT SIGN ). IF SC, IT rAS PROBABLY A CALL BY CMBMAT. IF(LAND(C 1),TEST ).E.TEST )C TO 9 28 C PRINT NICRAL ENTRY PESSCGE IF(BATCH)CALL LCCUNT(2) IF NPRT PRI NT I C1Q 3 OBJNIM 103 FOrMAT'CENTRY TC NAMTRA (*' A8v,2H') GO TO 939 S38 IF(BATCH)CALL LCCUNT(2t C INTERNAL CALL tESSAGE IF(NPRT)PRINT 94C,OBJNI 1 940 FORMAT('CINTERNAL CALL TL NAPTR(a{'''A8,2H' t C UPDATE DIREC INDEX 939 OIPPTR = CIPTPR * 2 C CHECK FCR hNAPE ANO LINKAGE CVE:FLChS IF(IRPTR.CGT.CIR AX)GC TC 776 I F TABPT + 34.GT. 1ABi AX) CALL ABCRTZ(-3 ITABLE(TAEPTR+1) = 2 L= (TABPTR+3)/2 I( IFLG.EC.l)GO TC 106 C THIS SECTICN HANDLES RNCLRAL' ENTRIES C NOTE TFAT EACH ARGUMENT Al...A16 IS CHECKED FOR TYPE 1C5 TABLE(L)=CHECKF(AI) L=L+1 TABLE( L ) =CCECKF ( 2) L=L+1 TAbLE(L)=CHECKF ( 3) L=L+l TABLE(L)=CHECKF( 4 4) L=L+1 TABLE(L) =ChECKF( A5) L=L+1 TABLE ( L )=CHECKF ( 6 ) L=L+1 TABLE (L)=CFECKF A7) L=L+1 TABLE(L)=CFECKF( A) L=L+l TABLE ( L )=CfECKF ( 5 L=L+l IABLE(L)=ChECKF( 10) L=L+1 TAbLE ( L )=CHECKF (ll ) L=L+l TABLE (L) =CHECKF( A12) L=L+I TABLE(L)=C-E(KF(,l13) TABLE(L )=CFECKF ( 14 L=L+1 TABLE( L ) =CCK ( 1 ) ) L=L+ 1 A17=CHECKF (A16)

-11 GC TO 773 C NMTRA1 HANCLINC SECTION. JLST LUOP THROUGH ARRAY E 1C6 DC 772 J=1,4 CC 772 1=1,4 TABLE(L)=CFECKF(E(J, ) ) 772 L=L+1 L=L-1 A17=CHECKF (E(4,4)) C CHECK THE 16TH ELEMENT TC MAKE SLRE I1S NOT ZERO (OR C SMALL ENCUGH TC BE T-E NEXT BEST THING TO ZERO.) 773 IF(ABS(A17-C.).LI..O0001GC TO 774 C IF NOT ZERO, STORE IT. TABLE(LU=A17 GG TO 775 774 IF(BATCH)CALL LCCLNT(l) IF(NPRT)PRINT 55C 550 FORMAT(' ***iARNING - SCALE FACTCR CF ZERO. CHANGED TO ONE.' C IF IT hAS ZERO, ONE IS A PRETTY CCOD GD UESS AS TLI WHAT HE MEANT. A 17=1. CALL A6CRTZ(4) TABLE(L)=A17 C UbPATE LINKAGE INDEX 7 75 TABPTR=T ABPTR+34 C RESET IFLG FCP NEXT TIME IFLG=O RETURN 776 CALL ABCRTZ(-2) RETURN END C C NAPASM C SLbROUTINE NhMASF(OBJNAIM,*) COMMON /ATAEL/ ICIREC(800), PCINT(5CCC),TABLE(5000) CCMMON /VAR/ FTMAXPTPTRTAeFAX,TAEFTRDIRyAXDIRPTRt *FTCTR,PT,ITP TPTCTR,CPEN,NkASM,CENNAM,NSCAL,NMOVENSHFT,LNMNPRite.ATCH LCGICAL NSCAL, NMCE,NShFT NFRT,eBTCH INTEGER*2 IPC INT( 100 ), II ABLE ( 1CCCC),PTIAX, PPTR,TABMAX,TABPTR INTEGER*4 IUIREC OPEN, CIRMAX,0IRPTtPTCTR,PT,TPTCTR REAL*8 C IREC(4CO ) OBJNA f,CENNAMPAC,OBJ ECU I VALENCE ( IPO INT ( 1 ), PINT (1) ), ( I TeLE( I,TABLE( ) ), * (l IREC( 1),ICIRE ((1) C NAMSUE WAS LSEC IN TFE EARLIEST'ERSICNS OF DRAwL, WHEN THE ONL' C LEVELS WERE POINTS, SUBASSEMBLIES, AND SUBASSEMBLIES. ASSEMBLIEF C COULD CCNTAIN ONLY SLEASSEMBL[ES AND POINTS, ANO SUBASSEMBLIES C COULD CCNTAIN INLY PCINTS. WE'VE CCIE A LCNG wAY........ C THIS WAS LEFT IN FOR CCMPATIBILIlY. C FIRST UESTICN, AS USUAL, IS'CCES FE BELdNG HERE?' IF(OPEN.NE.O) CLL CLCSE C IF SC, UPEN = 3 ====> MOCE IS'A SSEMBLY DEFINITION' CPEN=3 C SEE IF NAME IS ALREACD CEFINEC. IF SC, RETURN 1 CALL FNLNAM( IFINE,PACtCBJNAM),ITYP,62C0) DIREC (DIFPTR )=P/ C (CBJNAM PRINT 201,DIREC(CIRRPTR 201 FORMAT('0***CHAWL ERRCR -''',A6,''' ALREAY USED AS DRAWL NAME*) CALL ABCPTZ(3) RETURN 1

C STORE NAME, YFE, AND FCINTER TO TABLE IN DIREC 200 CIREC(DIFPTR'=PA[(UBJNAM) 20 I C I R t C ( E I F P T R )- P i t ( * B J 13 AM) ICIREC(CIRPTR*2+1)=3 IDIRECICIRPTR*2+2)= TABPTR+l C BACK PCINTER ITABLE( 1EAPT H)=C IRPTR IF(BATCH)CALL LCCLNT(2) IF(NPRT)PRINT 301,DIREC(CIRPTR) C ENTRY MESSAGE 301 FCRMATI'OENTRY TC NAMASI'''(M,A2H'H) C UPDATE NAME INDEX ANC CiECK FRC CVERFLCW DIRPTR=D IRPTR+2 IF (DIRPTR.GT.DIR AX)CALL ABCRTZ(-2) IF( TABPTR+3.GT.TABMAX )CALL AeCRTZ(-3) C STORE TYPE IN LINKAGE TAELE ANC ZERC TWO UNUSED HALF-WORDS ITABLE TABPTR+1 )=3 ITABLE(TABPTR+2 ) =0 ITABLEI TABPTR+ ) =C C INTITALIZE TE ENT IT IES IN ThI S ASSEMBLY' COUNTER NASM =0 RETURN C C NAME C ENTRY NAPE (CeJNAP,*,*,, ) C MAKE SLRE E I IN I-E RIC-T PLACE IF(OPEN*EC.3)GC 10 105 IF(BATCH)CAL'L LCCLNT(2) PRINT 104 104 FCRMAT(' C***CRA IL ERRCR - NAE C LLEC WITH NO' 1'NAMED ASSEMBLY VlA NAPASM ) CALL ABORTZ(5) RETURN 2 105 OBJ=PAD(CBJNAM) C FIND THE NAPE IN T'E NAPE TABLE CALL FNC NAM( I_,e., l TY P, & 100 C IT HAL etTTER NCT BE TRANSFORMATICN TYPE (2) IF(ITYP.NE.*2GC TO 107 IF(BATCH)CALL LCCUNT(2) PRINT lCE,CBJ 108 FORMAT('C***CRAhL ERROR - TRANSFCRPATIChN'',A8,''' USED', 1' AS ARGUMENT TC NAME.') CALL ABCFTZ(I) RETURN 3 107 NASM=NASM+l INDX=TABPTR+5+NASM C HAVING INCREMENTEC TFE ENTITY CCLNTER, AND CALCULATED C AN INDEX INTO THE LINKAGE TABLE, MAKE SURE WE'RE NOT ABOUT TO C OVERFLCh SAIC IPPORTANT TAELE. IF( INDX.GT.TABMAXCALL ABORTZ(-3) C I WAS PETlRNEC eY FNCNAM ITABLE(IINDX=I RETURN C IF THE NAME WAS NCT FCUNC, CCME CCWN FERE 100 IF(BATCH)CALL LCCUNT(2) PRINT l1C,GBJ,OBJ 110 FCRMAT('C***CRAWL ERRCR.',A8,2', Z 16, ) NOT FOUND BY NAME.') CALL ABGCTZ(7) RETURN 1

i-13 END C C FNCNAM C SUBROUTINE FNCNA?( IFINDNAMITYP,<) COMMCN /ATABL/ ICIREC(800), PCINT(SCCO),TABLE(5000) CCMMON /VAR/ PTMAX,PTPTRTAPEAX, IAEPTR,DIRMAX,DIRPTR, *PTCTR,PT, ITPTTPTCTROPEN,NAM,GENNA,NSCAL,NMOVE,NSHFT *,LNM,NPRI,BATCH LOGICAL NSCALNPI(CVENSHFT,NPRT,EATCF INTEGER*2 I C INT ( 10000 II TABLE( 10C CC),PTMAX, PPTR, TABMAXTABPTR INTEGER*4 IDIREC,OPEN,DIRPMX,C IPTRPTCTR,PT, TPTCTR REAL*8 DIREC (4CC ),OBJNA,GE NNA,FAC,NAM EGUIVALENCE (IPC INT(1),PC INT(1)), ( ITABLE( 1),TABLE(1) ) * (DIREC 1), ICIREC( 1) C ESTABLISH ThE LPPER LIPIT CF DIREC. WE WILL CCUNT BACKC hARDS THRCUGF 1HE NAME TABLE. NUP=DIRPTR-2 DO 100 J=2,NUP,2 I=OIRPTR-J C IF THIS IS THE NAME, ERANCH IF(NAM.NE.CIREC( I) ) TC 1CC C SEND HACK THE IYPE C b HHERE 1===>CBJECT, 2===>TRANSFCR, ===> ASSEMBLY,4===>TRANSFORMED C UBJECT CR ASSEtBLY) ITYP=IUIREC(I*2+1) C ALSO SEND EACK THE LCCATICN RhERE IT CAN BE FOUND IFIND=I RETURN 1CO CCNTINUE RETURN I END C C FINCBJ C SUBROUTINE FINCBJ CCMMCN /ATAEL/ ILIREC(80C), FCINT(AICCC),TABLE(5000) COMMCN /VAR/ PTPX, PTPTRTAEMAX IABPTR,DIRMAX,DIRPTR, *PTCTRPT, ITP.TPTCTR,CPEtNASMGENNAIP,NSCALNMCGV,NSHFT *'LNMM,NPRT,ETCH LOGICAL NSCAL,~MCVE,NShFTNFRT,EATCF INTEGER*2 IPCINT(1OfCC),I TABLE(1COCC),PTMAX,PTPTR,TABMAX,TABPTR INTEGER*4 ICIREC,OPEN.CI MAX,DIRPTRPTCTR,PT,TPTCTR C ERROR IS LSEC IN ThE PRINT STATEMENT BELCW REAL*8 CIREC( 4C),OBJNAM,GEtNAP, E FCR(3)/*FINJBJ *',ENOCMB', 1'FINASP'/,XNAPE C TF ANC ThE VARIABLES IN /CLSE/ tRE LSEO BY ENUCMB REAL TF(16) COMMON /CLSE/TC( 4,4), X XNAE, ISh ECUIVALENCE (IPCINT(1),PCINT (1)), ( ITABLE(1),TABLE( ) * (LIREC( 1, ICIREC(1 ) ) C DO WE EELCNG FERE? C TO HAVE ACCESSED THIS ROLTINE, kE ShULLD HAVE'OBJECT C DEFINITICN STATE' (CPEN=1) SET CN IF(UPEN. EC.1)G TO 110 IF(BATCh )CALL LCCLNT(l) C ERRUR(CPENI IS WhAT ShOULC FAVE EEEN CALLED IF (NPRT)PRINT 11 1,ERRCR( 1),ERRCR (CFE ) C NOW GO ANC SEE wHERE FE ShOULC -AVE BEEN

h-14 IF UPEN.E(.3)GO TC 16C GC TO 210 C STORE TIE NUMBER CF PCINTS IN LINKAGE TABLE 110 ITABLE(TABPTR+2) PTCTR C UPDATE LINKACE INDEX TABPTR =ITP+2 IF (BATCh )CALL LCCNT( 1) IF(NPRT )PRINT 10 1tDIREC ( IPTR-2 PTCTR C OUTPUT THE NUMBER GF PCINTS IN IFE CBJECT (A NICE CHECK C CN DO LGCPS LtCOPING REACS, ETC.) 1C1 FORMAT(3F-',Af8,'' HAS' I4,' PCINTS.' ) C kESET GPEN (I IM REACY FCR ANYTHING STATE") GPEN=O RETURN C FINASM C ENTRY FINASM c IF tL KEEP NAMSUB, ^E JLST GCTIA A\VE A FINSUB 1%C IF(OPEN.EC.3)GC 10 16C C CNCE AGAIN, IF FE DOESN'T BELONG FERE, TELL HIM SO IF(BATCH)CALL LCCUNT(1) IF(NPRT)PRINT ll 1,ERRLR(3),ERCR (CFEN) IF (UPEN.E(. 1)CU TO 11C GC TO 210 C RESET CPEN 160 CPEN=0 C OUTPLT TFE NLUEER CF ENTITIES INCLUCEE [FINPRT PRINT 17CNASP 17C FCRMAT(' IFERE tRE',13,' CCNSIITLENT ENTITIES.') C STORE AWAY TFE NUMBER ITABLE(T PTR+4 )=NASM C EVEN-ALICNMENT IS REQUIREC IN LINKAGE TABLE IF((NASf/2*2).NE.NASM) TABPTR=TAEFTIR1 C UPCATE LINKAGE INDEX TABPR - IABFTR 4 NASM + 6 C RESET NASM FCR NEXT TIvE NASM = C RETURN C C EN ClCMB C ENTRY ENCCP E C HE TRULY BELCNCS -ERE IFF OPEN=2 (CIBI3AT WAS CALLED) 2C5 IF(OPEN.LC.2)GC TC 21C IFIBATCH )CALL LCCLNT(l1) IF(NPRT ) PR INT 1 1, ERRCR (2), ERRR (OPEN) IF(CPEN.E.1)GC TO 11C GO TC 16C 111 FCRMAT(' ***WARNING - ILLECAL CALL TC',A7,1H;,A7, 1'CALLEC FCP YCL' ) CALL Ad6FTZ(15) 210 CBJNAM=XNAIE C RESET CPEN CPEN=O C SINCE CPILAT SET A SERIES CF (AT LEAST ONE) MATRIX MULTIPLIES C INTO ACTICN, TIE NATRIX IN TC IS ALL REACY FOR TRANSFORMATION C DEFINITION. PASS THE NAME GIVEN TC CMBMAT AND THE MULTIPLIED C ARRAY IN TC TC NMTRA1 (TFE ALTERNATE ENTRY 10 NAMTRA).

F-15 CALL NMTRAl(C38JNAMTC) C RESET ISh (CCnhAINEC IN /CLSE/) ISW=O RETURN END C C TRANSF C SLBROUTINE TRANSf (NE,CLC,XFCR,*,*,t*) C IT SHOULO BE P~INTED CUT THAT TRANSF wl LL NJT PERFORM C THE MATRIX MLLIIPLICAT ILS RECLIREE FCR A TRANSFORMATION. C IT MERELY SETS UP THE LINKAGES, ANC THE MULTIPLICATIUNS C ARE PERFCRME kIEN CRA%, SECW, PRTPLTPRTOUT ETC., ARE CALLEC CCMMON / TAEL/ ICIREC 800), PCINT( 50CO,TABLE(5000) COMMON /VAR/ PTMAX,PTPTR,1AE6AX,1AefTR,CI RAX,DIRPTR, *PTCTR,PTlTPTPTCTRCPEN,NASMCENNAMNSCALNMOVENSHFT *,LNM,NPPTBATCH INTEGER*2 I PC INT(10000, I TABLE ( ICC ), TMAX, PTPTR, TABMAX, TABPTR INTEGER*4 I CIREC,tPEN,DIRMAX,CIR TP,PTCTR, PT TPTCTR,Q( 2) LOGICAL NSCALh MC/ENSHFTNPRT,e8ATCREAL*8 IREC (4CO ),OBJhAI tGENNAM,PAC NEWULC XFORM C ERROR MESSAGE EATA IS IN TYPE REAL*8 TYPE(4)/' CBJECT',' XFCR"','ASSEmBLY','ASSEMBLY*/ REAL*8 NEIl,XFCRt~ OLC1 tEUIVALEhCE (IPCINT(1),FCINT l)),( ITAeLE( ), TABLE ) ), * (DIREC(1),IDIREC( 1 ), GENtANA, ( 1 ) C MASK hILL EE LSEC TC CETERMINE Wh-ETFER TEE CHARACTER C MANIPLLATICN SUPPURTING NAIPE-GEL\NEATICN hILL BECOME C ULTRA-CCPPLEX, CR MERELY PEMAIN PCCERATELY CONFUSING.... CATA MASK/ZCCCCCCOA/ C AS USUAL, CLES FE BELCNG EERE? IF(OPEN.NE.O)CALL CLCSE CPEN=0 C PAD ULT THE TFREE ARGLPENIS NEW1=PAC (NE ) CLUI=PAD(CLC) XFURM1=PC( XFLPI' IF(BATC )CALL LCCUNT(2) IF NPRT)PRI[NI 63,NE 1,CLDl, XFI 1 C PRINT TFE ENTRY MESSACE 663 FCRMAT (CENTPY TC TRANSFt,2 ( IF,A,2H', ),I',A8,2H')) C FIND TFE TRANSFCRMATICN MATRIX. IF ITS NOT THERE, BRANCH TO 357 CALL FNCNAP(J,XFCRPM, ITYP,&357) C tMAKE SLRE THE NAME CIVEN IAS A TRANSFCRtATION C BRANCF TC 6(:5 IF I hAS IF(IIYP.EC.2)GC TC 665 IF(BATCE )CALL LCCLNT(2) PRINT 664,XFCRM1 C IF IT WASN'T, TELL hIM ALL ARCLT IT 664 FCRMAT('O***CRAWL ERRCR -' ",Ad,''' IS NCT A TRANSFORMATICN', 1'NAME ) CALL ABGPTZ(17) RETURN 1 C FIND TFE'SOURCE' NAPE IN DIREC. IF IT WASN'T THERE, C BRANCH TC 356 665 CALL FNChAfI(,CLC1,ITYP,~356) C IF IT hAS A TR NSFURMATICN, GG TC 6E3, IF(ITYP.EC.2)GC TO 834 C IF THIS CALL TC TiRANSF ~AS ECU IV LENT TC THE FORTRAN STATEMENT

F- 16 C PstE C (I.E., ThE FIRST ARGUMENT WAS TFE SAME AS THE SECOND),KEEP G ING C OTHERi SE ERANCH TO 800 IF(OLOlNE.NEWl) GO TC 8CC C Q IS INVCLVEC IN BYPASSINC TFE FORTRAN IV CHARACTER MANIPC ULATICN RESRIC'ICNS. ThE FUNCTICL' LAND' DOES ITS SHARE C TOO. LANl IS A B ITW SE LCCICAL FUNCTICN. A 1 T IS ON IN C LAND'S RETURNEC VALUE CNLY IF IT WAS CN IN THE SAME POSITION C IN BOTH CF THE ARGUfIENTS. THIS SECLENCE MERELY CHECKS TU C SEE IF CVEPFLCW IN ThE EBCCIC REPRESENTATION4 OF THE GENERC ATED NAME REQUIRED EY TRANSF AT THIS JUNCTURE IS OCCURRING. (2 ) = Q(2)+1 IF(LAND( ASK,Q(2 ). EQO ASK ) C 2 )=C ( 2 )24 C IN THIS IMPLEMENTATICN, ThE VALUES ASSOCIATED WITH C THE NAME GIVEN AS FIRST AND SECCNC ARGUMENTS ARE PRESERVED C AND GIVEN A NElW (GENERATEC) NAME. ThE NEW NAME IS PRINTED C HERE. NCTE THAT THIS ALLChS TFE CLD VALUES TO STILL BE C REFERENCED INTERNALLY, BUT REFERENCES TO THE OLO NAME NOW POINT C TO THE TRANSFCPMED VALUE C I WAS RETURNED BY FNDNAM. FUT IFE CENERATED NAME IN THE C TABLE IN PLACE CF THE CLC NAME. 1CO DIREC(I )=GENNAM C PUT THE NAME JLST REPLACED INTL THE NEXT SLOT IN DIREC CIREC(DIPPTR )=NEl C PUT IN ThE'XFCRMED-ENTI1Y' KEY (=4) IC IREC ( C IPTR*2+ 1)-=4 C INDEX INTC LINKAGE TABLE IDIREC(DIRPTR*2+2 )=TABPTR+1 C BACK PCINTER ITABLE( TAePTR)=C IRPTR C TYPE 4 AGAIN ITABLE ( TABPTR+ )=4 C PUT LUCATICN CF THE XFCRP INTC LINKAGE TABLE C (AS RETURNED BY FhNNAM ABCVE) ITABLE ( TPTR+2 )=J C PUT IN LCCATICh CF SCURCE ENTI1Y ITABLE(TABPTR+3)= I C UPDATE INDICES FOR NAME ANC LI'KA(E TABLES DIRPTR=DIRPTR+2 TABPTR=TABPTR+6 2CO RETURN C THIS SECTICN IS FOR'NCRMAL' TPAfSFCRMATIONS C (.E., ThE FIRST ThO ARGUMENTS ARE NCT THE SAME.) C C CHECK ANL SEE hFEThER ThE NAME FAS BEEN USEi BEFORE C IF IT HASN'T, ERANCh TC 801 8CC CALL FNDNA (KNEl, ITYF l,8C1) IF(BATCH )CALL LCLUNT(2) PRINT 8 3,NE1, TYPE( I YP1) C TELL hIM THAT FE'S LSEC THE NAtE BEFCRE. C ALSO TELL hIM WHAT MCDE nAS ASSCCIAiED WITh THE NAME. 8C3 FURMAT('C*t:*RAL ERRCR -''',A8,''' ALREADY USED AS 1 A8,' NAPE.') CALL ABCFT (18) RETURN 4 C PUT AhAY ThE NEh NAiVE (THIS IS AN ENTITY DEFINITION) 8C1 DI kEC (O[ PTR )=NE E C BACKPCINTER IN LINKAGE TABLE ITABLE(TABPTR)=C IRPTR

-1 7 C TYPE ITABLE(TAePTR+1) =4 C LOCATION OF TRANSFCtRATION (AS RETURNED BY FNONAM) ITABLEt TAEPTIR2 )=J C LCCATICN LF SCLRCE ENTITY (SECCNE ARGUMENT) ITABLE TABPTR+3 = I C POINTER TC LINMAGE TABLE FPCM NAPE TAELE IDIREC ( IRP TR*2+ 2 = TAFTR 1 C TYPE IC IREC I IRPTR 2+1 ) = 4 C INCREMENT INCICES ANC C-ECK FCR TABLE OVERFLUWS DIRPTR=D IRPTR+2 TABPTR=TPEPIR+6 I- ( D I RPTR.GT.C R AX CAL L APCRT Z (-2 IF(TAP TR. TA.BAX )LALL ABCRTZ(-3) RETURN C ERROR MESSAGES FOR THE AECVE RCLIINE..... 834 IFIBATCH )CALL LCCLNT(2) PRINT 835,CLCl 835 FORMAT ('0***CRAWL ERRCR -'',A8,'" IS A TRANSFORMATION NAME) CALL ABCPTZ(19) RETURN 2 356 IF(BATCH)CALL LCCLNT(2) PRINT 1lOOCl,1OLD1 GC TO 35E 357 IF(BATCH)CALL LCCLNT(2) PRINT 1 O,XFCRtlXFCROP1 10 FCRMAT('C***ERAhL ERRCR -''',A8,2' ( Z 15,') NOT FOUND BY TRANSF') CALL ABCPTZ(20) 358 RETURN 3 END C C CRAI SUBROGTINE C SUBROUTINE LRAI ( CBJNA t *,*,,*) C THIS SECTICN CF CODE IS VIRTUALLY IDENTICAL FOR C DRA.q, SHGWPRIFLT,DISFLA,FRTCUT,PRTPLT. THUS ENTRIES ARE C PROVICEC IN THIS AREA FOR ALL SLCH ROUTINES. C IDEV IS SET TO INUICATE tHICH ENTRY WAS TAKEN: C 1===>SFHC C C===> PAN C -1===>CISPLA C 2===>PRTCLT C 3===>PRTFLT C 4===>PRTPLT CCMMCN /ATAeL/ ICIREC(eCC), PCIN1 (C(C),TABLE(>OCO) CCMMON /DRWCCM/C\EC(50),CUPMAT (5C),EXPIRE(50),ID IC, 1 NPTS,ICMAXICMAX,XV IN,XMAX,YVIN,YMAX,T( 5460), IT(2730 ) IL CCMMCN /VAR/ PTMAXPTPTRTAEIAXt T, 1APTRDIRMAX, IRPTR, *PTCTR,PT,ITP,TPTCTRLPENNtASN,GENNA.NS(AL,NMUVE.NSHF-T *,LNM,NPRT,EATC INTEGER ELNK/''/,NC/'NC'/,IPTCTR INTEGER*2 I NU M, DEC,CURMAT,EXP IRE, ID, IC I T LCGICAL NSCAL,NOEVE,NSHFT,NFRT,BeATCF INTEGER*2 I PC INT (1COCO ), I TABLE ( 1CC CO ),PTMAX, PfPTR, TABMAX, TABPTR INTEGER*4 ICIREC,GPENt,C IRAX CIP PITR,PTCT R,PT REAL*8 IREC(400 ),UBJNAM,CENNAt,LCRPRT(6) /'UISPLA',' DRAw', +' SHOW''PRPTUT',PRTPLT','PRTPLT'/,PAD,FOUND,XFOUND, + CbJNM 1

-.-.18 EQUIVALENCE IICINT( 1 },PC1NT (1 ),( ITABLE( 1),TABLE( 1} I * (GIREC (), ICIREC (1 IDEV=0 GC TO 38 ENTRY SHCt (CeJNAM ) IDEV=1 C DFSN BLANKS ThE DISPLAY SCREEN IF(NMOV~)CALL CF N GO TO 38 ENTRY DISPLA(CBJNAM) ICEV=-l GC TO 38 ENTRY PRTGLTI(OlTEJNAM IDEV=2 GC TO 38 ENTRY PRTPL TOBJ JNAM ICEV=3 GO TO 38 ENTRY PRTPLT CBJNAM, IFLT ICEV=4 GO TO 38 C DOES HE BELCNG HERE? 38 IF(OPEN.INE.C)CALL CLCSE OPEN=O C INITIALIZE T-E INDEX FCR ThE CLTFLT PRRAY ([L=1) IL=1 C CALL TIME(C) INITIALIZES T -E CPL-TIUE CCUNTER (USED FOR C TESTING PURPCSES) IF(NPRT)CALL T I E (O) C THE NEXT FOUR PARAMETERS ARE FCR THE SCALING ALGORITHM XMAX=-1.E6 X M A X = - 1. E 6 XMIN=1.E6 YMAX=-1.Et YMIN=l.E6 C THE NEXT SIX SIATEMENTS SET UP THE FRINT LINE FOR ENTRY C MESSAGE. NSC=BLNK I\MO=NO NSH=BLNK IF(NSCAL )NSC=N IF (NMOVE )NPC=eLNI IF(NSHFT )NSH=NC C THE NEXT FCUR FARAMETERS ARE IITI IALIZED FGR ORETRV ID=l IC=0 ICA=O ICMAX=0 [CMA X=O C NPTS IS ThE NUlIBER LF FOINIS. IF THIS WAS THE FIRST C DRAWING (AS ShCWN BY LNM J E WILL PUT UN AN EXTRA POINT C AT THE BEGINNING CF THE CLTPLT vECTOR. IT WILL BE C EQUIVALENT TL CALL PCINTS(0,O.,C.C.,C1.) NPTS=1 IF LNM.EC.0)CC C 8C NP S=0 IL=- 8 LNll=LN M+1 CBJNMl=PAC ( tJNAt ) C FIND ThE ENTITY IN ThE NAME TAELE. IF NOT THEREF TO 1I CALL FNtSPAM INFII C,t3JNM 1 IYP,t 61C)

H-19 IF(BATCH)CALL LCCLNT(2) C DRWPRT(ICEV+2) WILL SET UP TIE APPROPRIATE MESSAGE IF(NPRT)FRINT 9,CRWPRT(ICEV+2),OEJNI1 9 FORMAT('CENTRY TO',A6,2F(',AE,2h')) IF(BATCH)CALL LCCUNT(1) IF(NPRT)PRINT 1,LRWPRT(ICEV+2),NSC,NMCNNSH C SET UP ANC PRINT OUT ThE APPOGPRIATE PARAMETERS I FORMAT(1X,PA6' PARAMETERS:',A2,'SCALt',A2,*MOVE,',A2t'SHFT ) C MAKE SURE AN ENTITY NAME kAS PASSEC.IF SC, GO TO 11 IF(I'TYP.hE.2) GC TO 11 C UTHERWISE, PRINT ERRCR MESSAGE IF(BATCH )CALL LCCLNT(2) PRINT 3,DORWPRT(ICEV+2),CBJNMI 3 FORMAT( O***CRAWWL ERROR - ATTEMPT TC', 6, TRANSFORMAT IN'' I *Ad,1h ) CALL ABOGTZ(21) RETURN 2 10 IF(BATCH)CALL LCCLNT( ) PRINT 12,UBJNM1,CBJNP1,DFWPRT( [CEV+2) C IF THE ARGUMENT %ASN'T FCLND,SET LF MESSAGE AND PRINT I T 12 FORMAT' C***CRAWL ERRCR -'', A8,21' (, Zlo,' NOT FOUND BY',A6) CALL ABCPTZ(22) 14 RETURN 1 C FNOW FOR THE RET I EVAL ANC MULTIPLICATION PART OF IT ALL. C ORETRV IS A PSEUDU-RECURSIVE FLNCTILN. IT IS NON-TRIVIAL C YET SIMPLE IN ITS OitN, EFFECTI,E AY. C C INITIALIZE CLEC FLPR OETRV 1 CVtC(1)=-IFIND 13 CCNTINUE C CALL DRETRV. NCTE IT WILL RETUFN TG THE STATEMENT BEFORE C THE CALL IF IT TAKES EXIT CNE AN. KEEP CALLING ITSELF CALL DRETRV(I63d,19) C EXIT 1C 19 IS TAKEN IF TFE LSER ATIEMFTEC TO PLACE THE C EYE PC INT IN THE SAME X-Y FLANE AS CNE OF THE POINTS TO C BE DRAWN (THIS WOULE CAUSE CIV ISICN BY ZERC) C CRETRV HAS NCW SET LP ThE CLTPLT tRRAY. CALL OUTPUT, WHICH C LIKE CPAt IS CCMMCN TC ALL TYPES CF CUTPUT. 18 CALL CUTPUT(NSCALNSHFT,NIMCVE t IOEVNPRT, I PUTATCH&16 ) C tXIT TO 16 IS TAKEN IF ThE DRA ING GCES CFF THE SCREEN C WHEN EXECUTING A'SFCil'. THIS S-CULC COME AdGUT ONLY C WhHEN ThE USEk IS RUNNING h ITH SFFT CR SCAL OFF. C HAVING GOTTEN FERE, THE CRAW INC IS CCMPLETE. C GET THE ELtPSEC C.P.L.TIME IN INT (SINCE CALL TIME( )) IF(NPRT )CALL T IME( 1,0, I ) C CCNVERT IT FRCI MILLISECCNCS TC SECCNCS ZTIME=IN/ 1CCO. C AND PRINT IT GCL IF(BATCH )CALL LCCUNT(1) IF(NPRT)PRINT 17 ZTIPE 17 FGRMAT(F7.3,' C. P. U. SECChCS FCO CRAWING.') C THE DRAWING IS COMPLETEC. ALL IS WELL. RETURN C 19 IS ACCESSE CONLY IF DRETRV IAC AN ERRCR AS INDICATED ABOVE 1 RETURN 3 C lb IS ACCESSE CONLY IF OLTPLT IAC AN ERRCR AS INDICATED AtbOVE 16 RE TU)RN END C

[.-20 C OLTPUT C SUBROUTINE COTPLT NSCAL,NSFFT,NtCVE,ICEV,NPRT,LON, BATCH) G OUTPUT'S PAIN FLNCTICN IS TC SCALE RAW INGS (AND C SHIFT TFEP IF NECESSARY) SO THEY FIT ONTC THE OUTPUT C DEVICE. IT ALSC SELECTS ThE APFPRPRIATE OUTPUT DEVICE C (ACCORCING TC 1HE INFORMATICK PASSED IN IDEV) INTEGER*2 INL Pt CVEC,CLRMAT EXP IRE, IC, 1C, IT COMMON /CORCCM/C~EC (5 ), CURIAT {50 t EXPIRE (50), I D, IC 1 NPTS, ICMAXIC/AXXMIN,XMAXYI'IN,YMAXT( 5460), IT(2730),IL LOGICAL NSCAL,NS FT,N OGVE,NPRTEATCh INTEGER I PAGE ( 1570),NSCAL E( 5 )/Ct,C,2 tC, 3/ C THE FOLLOWING 4 VARIABLES ARE LSED FUR SCALING XMINL=1.E6 XNAXI=-1.E6 YPINl=1.E6 YMAX1=-l.E6 C XLIM ANO YLIM /RE THE MAXIMUM CLIPLT SIZES ALLOWED C FOR THE VARICtS DEVICES. THIS SECTION SETS THEM. IF(IDEV.EQ. 1.O. ItEV.EC.-I)CC TC 10 YLIM=28. XLI =49. IF(IDEV.hE.O)GC TO 12 C THE UNIVERSITY Gf- MICt IGAN CRAWLL IIPLEMENTATION USES C 1HE UNIVERSI TY'S CALCCIVP P FUTINE PACKAGE. ALL SUCH ROUTINES C ARE NAPEG STARIING WITH A LETTER P C PFDNA SETS THE LOGICAL CEVICE NLMVBER ONTO WHICH PLOT FILFS C H(I.E., CGCIANVDI TO TFE PLCTTER) ARE TC BE WRITTEN. C AT RUN TIEt, tHE LSERS MLST SAY C $RLN MYPROGRAM+SS1C:CRAWL 8=PLCTFILE C THIS hILL WRITE THE PLCT FILE TC LCI 8 (IF DRAW IS CALLED) C 8 SHOULD NCT BE USED FUR ANY CTFER PURPCSE CALL PFCNAM(8) C PLTXMX SETS THE MAXIIbFL PAPER LENGTH CALL PLTXNX(4q. ) GC TO 12 10 IF(IOEV.EC.-l)GO TO 11 C THE UNIVERSITY OF t ICHIAN CRAWL IPPLEM1ENFATION USES THE C DF ROUTINE (FOR DISPLAY FILE RCL INE) PACKAGE OF THE C CLNCOMP FRCJECi FOR ThE DICITAL EQLIFPENT CORPURATIUN C 338. ALL OF RULTINE Nh/IES STtRI hITF IDF'. C THE DISPLAY SCREEN IS S.375 INChES SULARE XLIM=9.3 75 YLIM=9.375 C DFINI INITIALIZES TFE DISPLAY FILE BUFFER CALL DFINI(C,) GC TO 12 11 XLIM=30. YLI -lO. C TUPEN INITIALIZES ThE ROLTINE FCR ThE 10" CN-LINE C PLCTTEH REFERENCED BY DISPLA. C IT HAS BEEN [MPLEMENTEC AT THIS POINT CALL TCPEN(.TRLE. 12 IF(BATCh)CALL LCLUNT( ) IF(NPRT) PRINT 34,XM IN,X AX, Yl IN, N / X C PRINT CtL THE REAL CDRA ING LIMITS AS ClSCOVERED BY oRETRV 34 FCRMAT(' XWIN=',F12.3,' XPAX=',F12.3/ 1' YTIN=,F12.3,' YFAX=',F12.3) C START ThE SHIFTING ANDi SCALING PROCEIDLRE

F-21 C F IND CLT IF TFE LIMITS AS CISCCVEREC FALL WITHIN XLI M AND YLIM C MAKE SURE THERE'S NGTHING IN QUACRANTS I,Il I,OR IV UNLESS C NOSHFT IS CN. I F XM IN. C-T.C )X IN=O. IF(YM IN.GT.C. ) YM N=0. XSCALE=( XMAX-XPtI)i/XLI YSCALE=( YMAX-YM In /YL IP IF(NSCAL )YSCLE= 1. IF(NSCAL!XSCALE=1. IF(XMAX-XMIN.LT. XL I ) XSCALE= 1. IF( YMAX-YMIN*LT. YLIM) YSCALE= 1 IF(XSCALE.LT.YSCLE) XSCALE=SCALE IF(YSCALE.LT.XSCALE)YSCALE=XSCALE IF (NSHFT ) XI [N=0. IF (NSHFT )YMIN=. C J WILL CCLNT THE NUNEER CF PCINTS LSEC (ONE DISC PLAY F ILE CAN FCLD CNLY 255 PCINTS.) J=0 S76 CONTINUE IF(IDEV.GT.1)GC t1 426 C LOOP TFPClGH TIE ARRAY T WHICH WAS SET UP BY DRETRV C AND SCALE NEDC HIFT ALL PCINTS (NOTE THE SCALE C FACTOR IS CNE IF NOSCAL IS CN AND THE SH1FT FACTOR C IS ZERC IF NCSfFT IS CN. C THE NEW FAXS ANE MINS ARE RECCRCEC. DC 126 I=1,NFIS XR1=(T( I*2-1)-X IN)/XSCALE YR1=(T(I*2)-Y IN)/XSCALE IF(XR1.LT.XMIN1 )XMN1=XR1 IF(XR1lGTo.XPAXl)>MAX1=XRl IF(YR1.GT.XMAX1)NPAXl1=YX C GU TO THE RIGHT OLTPLT DEVICE'S FCLTINES IF(IDEV)327,127,227 C THIS IS CALCCMP TERRITCRY. TFE SW ITCH WILL BE IN\ "IT". C ALLOWABLE SWITCHES ARE 0=[NVISIBLE,1=VIS ILE,2=DASHED C LINE,3=CENTER-LINES tRE TC BE CRhAN. C THE ShITCHES HAVE TC BE ELMPED UP EY CNE TO BE MADE C CCMPATIBLE k ITH THE RCLTINES Tt-E FEEC. C WAS USED FOR C INVISIBLE EECALSE OF ITS LCCICAL CC(NECTIONS. 127 IS=IT(I)+1 C EACH TYPE CF L IE TC BE CRDASN FHS IT'S ChN PLACE GC TC (120,12 1,122,123), IS C NOTE THAT IF AN ILLEGALLY HIGH VtLLE IS FOUNDt IT DEFAULTS C TO PENLP, CR INVISIbLE LINE. C PENUP'S ARGUIENTS ARE (X,Y IN INC-ES 120 CALL PENLP(XPl,YR1) GC TO 126 C PENDN ALSC GEIT (X,Y) IN INCHES 121 CALL PENEN( XFF 1) GC TO 126 C PDSHLN (CDSHEE LINES) GETS (X,Y) ANt 4 CTHER PARAMETERS ~C (UNRELATEC TO CENERAL I[PLEtENTATICNS.) 122 CALL PDShLN(XRl,YRR,2,1,O,C) GC TO 126 C PCTRLN(FCR CEN~TR LINES) 1ETS (X,Y) IN INCHES. OTHER THREt C PARAMETERS ARE NUr PRGFCUNC. 123 CALL PCTRLN(XPl1,R12t,1,C) GC T0 126

- 22 C FtOR THE CRT1 IF ThE ShITC F IS.NCN-ZERC, SET IT TO 1 227 IS=O IF(IT(I.NE.C)IS=1 C UPUATE NUMBEP-CF-PCINTS IN THIS ERACING COUNTER J=J+1 C MAKE THE FIRST VECTCR AN INVISIBLE CNE IF(J.EQ.1) IS=O C DFXYC BUILES A DISPLAY FILE. TFE ARGUMENTS ARE C X AN)D IN INCHES, ThE CN/CFF SI ITCH. EXIT TO 999 IS TAKEN C IF THE CRAW ING W ILL CC CFF ThE SCREEN (CCULD CRASH C THE DISPLAY'S SCFTWARE OTFERlISE.) CALL CFXYC(XR1,tYRlIS&69S9) IF(J.LE.254)GO TC 126 C IF THE CURRENT FILE IS FLLL, SET LP ANOTHER ONE J=O C OFAVL PETLRNS ITE'NAPE' CF ThE LtST USEC C DISPLAY FILE. 1-E ASSUMPTION ThAl CRAWL IS NCf THE C CNLY POSSIBLE SCURCE CF DISPLAY FILES ALLOWS GREATER C FLEXIBILITY. CALL OFAVL(NAM) C DF201 SENDS TFE DISPLAY FILE TC TFE REMOTE DISPLAY CALL DF201(C hNA) C 0OFINI AGA IN INIT IALIZES TFE NEN C.F. EUFFER CALL DFINI(OO) GC TO 126 C ON-LINE 1C" CALCCtP FCUTIINE 327 IS=0 IF( IT( I.NE.C ) I S=1 C SEND THE PLCTTER THE X, AND Y IN INChES, WITH PENUP/DOiN SW. CALL XYAES(X,Y,IS) 126 CCNTINUE C 126 IS THE END OF THE LCCP. C IF WE GET HERE, THE DRA ING IS CCNE. CET THE NAME OF C THE LAST C.F. FCR TRANSMISSICN. CALL DFAVL(NAM) GC TO 333 C THIS SECTICN IS FCR PRINTED CUIPLI (PRTPUTPRTPLTPRTOUT) 426 DC 424 I=1,NPTS I2=1*2 121=1*2-1 C SCALE THINGS IN THE ARRAY'T' ND LEAVE H TH THERE C PASS THE ARRAY TU THE APPRCPRIITE RCL1INE C FOR FINAL CLTPLT TI121)=(T(I21)-XfIN)/XSCALE IF(T( 121).LT.XMIN1)XMIN =T( I21) IF(T( 21.GT.XXPA1 )XAX1=T(I21) T(I2)=(T (2)-YPIN)/XSCALE IF T ( I2 ).LT.YMIN 1)YIN1=T( 12 IF ( I2).GT. MAX ) YAX1=T( 12 ) 424 CONTINUE IF IDEV- )429, 52,v625 C 525 IS FOR PRIITER PLCT RCUTINE C "625 IS FCE hRIl l-iG CN A CDEICE (LEN C - S) C 425 IS FCk PRINTING CUT TFE VALLES IN TABULAR FORM 425 IF (bATCH )CALL LCCNT(57 ) DC 427 I=1,NPTS IF(BAT C ) C LL L C: L NT( 1 ) C PRINT CLT'IE VALUES IN THE ARRAY'T' 427 PRINT 110, IT ( I ),i ( *,T( 1*2 )

H-23 110 FCRMAT(3X, I24(2X,F7.2 )) IF(BATCH)CALL LCCUNT157) GO TO 333 625 CC 626 I=1,NP1S C WRITE CLT TFE VALUES IN ARRAY *T' Ch THE REQUESTED LDN 626 wRITELDN, 11C) IT (I),T( *2-1),T(1*2) GC TO 333 525 IF(BATCH)CALL LCCLNT(57) IF(BATCH) ILEN=1CC IF(.NCT.EATCF) ILEN=71 IF(XMAX1.LT. ( 1.5*YMAX1) )X'AXl=. 15. *YAX1 IF(YMAX1.LT.(.666*XMAX1) )YMAXI=XMA) 1*.66 C PLOT14 WILL FLCT THE ENDFLINTS OF ALL LINES CN THE PRINTER C IN ORDER, ThE ARGUMENTS APE: C SCALING INFORMATILN (0 FCF US), * FCRIZCNTAL GRID LINES, C # SPACES BE'TWEEN HORIZ. LINES, * VERTICAL LINES, #SPACES C BETWEEN VERTICAL LINES, AN ARRtY IN WHICh THE OUTPUT IMAGE C IS TO BE SET UFThE XMAX,XMIN,V X,tYMIN,T FE CHARACTER TO C BE USED IN PLOITING,ThE X-ARRA/,Y-SRRAY,NUMBER OF POINTS, C BYTE SIZE CF X 6Y ARRAYS (8 FOR LS), LABEL C SWITCH (0 MEANS NO LABEL), AND LCCITILN CF LABEL. C THIS RCUTINE IS IN THE MTS SYSIEF LIERARY. DIFFERENT C INSTALLATICNS kILL HAVE LIFFERENT PCLTINES ANC ARGUMENTS. CALL PLLTI4(NSCALE,2,53,2, ILEN, IfAGE,XMAX1,XMINI,YMAXltYMIN1, *'',T ( 1) tT(2),NPTS,~,C,N) IF(BATCH)CALL LCCLNT(57) 333 CCNTINUE C IF THE RAWtING WAS SCALED, TELL H1F ABOUT IT F (ABS(XSCALE-1.C).LT..C05 )CC TC 37 IF(BATCH)CALL LCCUNT(1) IF(NPRT)PRINT 36,XSCALE 36 FORMAT(' ThIS CDRING WAS SCALEC EY',F8. 3) 37 IF(BATCH)CALL LCCUNT(3) IF(NPRT)FRINT 35 C PRINT IHE ACTLAL RCUNCARIES 35 FORMAT(' ACTAL DRAWINC BCEUNLARIES:') IF NPRT ) PRIN 34,XMIN IXMAX 1,YM IN, YMAX 1 C FINISH EVERYThING CFF - FLTEND F CVES THE CALCCMP PAPER, C DF201 SENDS TIE LAST D.F. C TCLLOSE CLLSES IFE ON-L INE FLTCTE F'S eUF FER IF( IDEV.EQ.O.ANC.NMOVE)CALL PLTENC IF( ICEV.C.1 )CALL DF201(CNAM) IF(NMUVE.ANC.ICE. EQ.-1 CALL TCLtSE RETURN 999 RETURN 1 END C C INTERNAL RETRIEVAL SLBRCUTINE C C URETRV IS A PSEUDO-RECLRSIVE RCLTINE. IT'PUSHES' C AS MANY T IMES AS THERE ARE LEVEL CF NESTED ASSEMBLIES UR C APPLICATICNS CF TRANSFCRMtTICN MTR ICES. IT MAINTAINS THREE C PUSH-CChN STACKS: C DVEC - A LIST CF ThE ENTITIES NESTED WITHIN EN1ITIES. THE C ENTRIES CChSIST OF THE PCINTERS TC ThE ENTITY'S C LOCATICNS IN TEE NAME TABLE. ThE PCINTER TO THE NAME C WHICH CCNTAINS CTHER ENTITLES tAS ThE NEGATIVE OF ITS POINTER. C iHEN AN ENTITY IS PUSFED CNTC CVEC, ALL ITS CONSTITUENT C ENTITIES ARE ALSO PLbSED LCTU CVEC. ThE ENTIT IES

H-24 C hHICH ARE CCNTAINED IN TFE LAST ENT11Y (IF ANY) ARE THEN C PUSHED CLTE- TFE END CF TFE STACK, WITF THE OLD END BEING C GIVEN TE-f EGATIVE CF ITS VALUE. IC IS DVEC'S INDEX. C CURMAT - CONTAINS PCINTERS TO T TE TRANSFORMATION MATRICES C WHICH ARE TL eE APPLIED TC ALL PFINTS PRCCESSED. THIS KEFPS C TRACK CF TtE LEVELS CF TRANSFORMATICN. IC IS THE INDEX C FOR THIS STACK TMAT CCNTAINS T E PRCDLUCT OF ALL MATRICES C FROM CURMAT (1) *...CURMAT (C) AT AIY CIVEN TIME. C EXPIRE - KEEPS THE VALUES GF IC SUCH THAT WHEN EXPIRE(IC) C IS LESS THAN ID CLLRtMAT(IC) IS TAKEN OFF THE LIST, AND C TMAT IS RE-EVALUATED. IC IS LSEC BY EXPIRE AS INDEX. SUBROUTINE CRETRV(*t,* CCMMCN /AIAEL/ ICIREC C I NT ( 5O0 C ),TAeBLE(5000O COMMUN /CRWCCM/CtEC( 50) CURMAT (5C E,E XP IRE (50), It C, 1 NPTSICMAXICMXXMNXAXXMINXAX,YMIN,YMAX,T(546),j IT(2730),IL CCMMON /VAR/ PTIAX,PTFIR,T TAPEAX 1 AE PT R, R AX )IRPTR *PTCTRPTITPTPTClkTR,PENNASAitGENNA., NSCALNMOVENSHFT *,LNM,NPt, BATCH INTEGER*2 INLM, DEC,CURM IATEXPIREE, ICICIT INTEGER*2 I PC INT ( 1OC C ), TA LE ( CCCC,P MAX,PTPTR TABMAX, TABPTR INTEGER*4 IDIREC,OPEND[IRAX,1DIPTRPTCTRtPTtTPTCTR IX/I/ IY/2/ LOGICAL EATCH REAL*8 CIREC(4CO),PACGEKNAN EQUIVALENCE (IPC IT(I PLINT( )1,(ITABLE( )1TAtLE(1)), * (DIREC( 1), ICIREC(1)) C ULTTPTS kILL CCOTAIN TFE VALUES LLTIIMTELY PASSED TO THE C OUTPUT ARRAY' 1 C TMAT, TMAT 1, AN TPCINT APE SCRATCH MATRICES. REAL OUTPTS(4),T PFINT (4),TtIT(4,4),TT VAT 1(4, 4) C ID WAS SET TC 1 BY D;RPA (ST1I 11) FCR THE FIRST TIME THRU lRETRV INUM=I D C WHEN IC=C WE'RE DLNE. IF( INUM.E.C )RETLRN C TO 4 IF TFIS IS THE FIRST TIME TFRCUGF IF(INUM.EQ.i)GC 10 4 C THIS SECTICI'FCPS' ALL STACKS. CO 100 1=1,IC I 1=ID-I+ 1 C THE FIRST NEGATIVE DVEC(K) MEANS HEAC OF SOMETHING TO DO. IF(DVEC( I.LT.C GO TC 1C1 100 CcNTINUE C DOES TFIS ENTITY HAVE SUE-ELEMENTS? C IF NOT, TC 1C2 101 IF(DVEC( Ill1).E.C)GC TC 1C2 DVEC( 1+1)=CVEC(11+L)-1 C INDICATE'h RKING-CN-THIS-ELEMENTI. DVEC( ID)=-CVEC(IC } GC TO 4 C ZERO IT IN CVEC 102 CVEC( I )=O 10ID=I 1-1 C IF DVEC FINALLY EMPTY, tE'RE CCNE. IF( I0.E.O ) RETURN C NU MATRIX TO LEE? IF NCT, RETURN. IF(IC.LE.CIPETLURN C SHGULL CUjREtNT TMAT MATRIX eE EXFIRED? IF NOT, RETURN IF(IO.GE.EXPIRE( IC)) RETURN 1 C IF SC, ZERC IT CUT CURMAT( IC)=0

H -- 2 5 EXPIRE(IC)=C IC=IC-1 IF(IC.LT.1 RETURN 1 C SET TMAT TO ICENTITY MtTRIX 00 112 J=1,4 DC 112 K=1,4 TMAT ( J,K) =0. IF(J.EQ.K)TMAT1 J,K)= 1. 112 CCNTINUE C IN THIS LUCP, eLILC TMPT hITI ThE NECESSARY MULTIPLICATIONS. CO 115 J=l,IC IARG=IDIREC(CUF lT (J) *2+2)/2 1 CALL MATMLT(TMAT,TABLE( IARG ),TFAT1) IF(IC.EC.JJRETLRN 1 DC 115K=1,4 DC 115 1=1,4 115 TMAT( I,KI=TPAT( I,K) RETURN 1 C FOR ThE FIRST TIME [TfRCUGh, OVEC(1) hAS SET AT STMT 11 IN DRAW C TO THE -(LCCATILN IN CIREC OF ENTITY TO BE DRAWN). C ISTART IS TFE LCCATICN IN TABLE CF ThIS ENTITY. C IGO IS TFE TYPE OF ENT ITY. 4 ISTART=IC I REC(-CEEC( I NUM )*2)+ IGO=IOIREC(-CVEC(INUM)*2+1) GG TO( ICCC,2COC, 300C,4COC ), IGG C OBJECT RETRIEVAL - SET UP LIMIIS IN'POIi\T' FOR THIS OBJECT 1C00 ILC WR=IST ART+3 IUPPR=ILCWR+(ITAELE(ISTART1+)-1)42 CC 1CC9 J=ILtCR, ILPPR,2 NDX= I TABLE (J 1 KUPPR=ND +3 Kl=0 C COPY ThE NEXT FCINT IN T-E BLJECT INTC TPCINT DO 1011 K=NDX,KUPPR Kl=K1+l 1C11 TPOINT(K1)=PCINT(K) C INCREMENT PCINTS-TO-BE-DRA/iN CCLNTER NPTS=NPTS+1 C IF IC < 1, PLI T IS LNTRANSFCRPEC C IF IC = 1, PCINT IS TO BE TRANSFCRPED BY CNLY ONE MATRIX C IF IC > 1, FL IT IS TC BE TRANSFCRVEC BY THE MATRIX PRODUCT IN T C C UNTRANSFCL8REE FCINT IFI IC-) 10115, 101,1012 10C1 CC 1013 K1=1,4 1013 OUTPTS(kl)=TFCINI(K1) GL TO 1C1l C POINT TO BE TRANSFCRMEC BY T'AT 1012 CALL PTILT(CLTPTSrT'PC INT,TAT) GC TO 1010 C POINT TC BE TiHNSFCRPIE BY ONE MATRIX ONLY - TAKEN STRAIGHT C FRGM TABLE. 1014 IARG=IDIREC(CUPAT ( 1)*2+2 /2+1 CALL PTMLT(CUTPTS,TPCINTTABLE( I/R - ) ) 1010 IF(ABS(ULIP7I(4 ).LT..OO)GC TC TC 2CC C INCREMENT CLTPLT VECTOR INDEX, CHECKING FOR OVERFLOW. IL=IL+2 IF(IL.GT.273C)CL TO 1235

H-26 C t HERE'S ThE SCALE FACTCR CC INGS ITS THING. C,IX AND 1Y ARE SET BY VIEWXY, VIEkXZ, AND VIElWY. DEFAULT SETTING C IS X-Y PPCJECT ICN. C CHECK TFE CRAWING LIMITS - USEC EY OUTPUT FOR SCALING. T IL )=LTPTS(IX )/OUTPTS(4) T(IL+1)=CLTPTS(I')/CUTPIS(4) IF(T (IL) GT. XMAX )XMAX=T(IL) IF(T (IL).LT.XMIN )XMIN=T ( IL) IF(T(IL+1).GT.YMAX)YMAX=T(IL+1) IF(T(IL+).LT.YMIN)YM IN=T (IL+ ) C TYPE-OF-LINE ShITCH (FIRST ARGUMENT TC "CALL POINTS") 1CC9 IT( IL/2+ )=ITAeLE( J+l) C ZERO OUT TFE LAST ENTRY INh VEC. DVEC(ID)=O C DECREMENT CVEC INDEX C= ID0-1 RETURN 1 1235 IF(BATCH)CALL LCCLNT(2) PRINT 1236 1236 FORMAT('C*t*CRAhL ERkLR - tCLY 27iC FCINTS/ORA ING. ) RETURN C ASSEMBLY RETRIEVAL 3000 NUM=ITABLE(ISTAR1+3) C GET TFE h CF ETITIES IN THIS ENTIIY. CVEC( ID+1)=NLM C SET ThE LCCP LIMITS TL UIG TFE ENTITIES CUT OF TABLE NLCWR=IST~!T+5 NUPPR=NLCh+NhM- 1 C WEILL PUT THE PCINTER TO EACH EN1ITY INTC OVEC IC=ID+NUP+1 C KEEP TRACK CF IFO BIG IC CETS. TF IS hAS A DESIGN PARAMETER. C BY PRINTING IT OUT (ALCNG lITH ICFAXI,FINO OUT HOW BIG CIMENS[ON C LIMIIS FCR D\EC ANC CURMAT SHCULC BE IF( I.GT.ICvAX) ICMAX=IC 11=10D+1 CC 3200 I=hLCWRNUPPR 11=11-1 C PICK UP FCINTEP 3200 DVEC( I1I=[ITAeLE( I) RETURN 1 C RETRIEVAL CF TFANSFCRMED ENTITIES 4CCO IC=IC+l IF(IC.GT.ICMAX) ICMAX=IC C PUT PCINTEF TO THE XFCHR IN CURPAT CLRMAT( IC)=ITABLE(ISTART+1) CVEC( IU+1)=1 C SET UP CVEC hkIF PTR TC'SCURCE' ENTITY CVEC( ID+2 )= ITABL E ( ISTR T+2 ) C INCICATE hFEN THE MAIRIX JLST SPECIFIED IS TO'EXPIRE' - THAT IS C SHOULD NCT eE MULTIPLIEC INTO FOINTS ANY iURE IN THIS DRAWING. EXPIRE( IC)=IC I[=ID+2 IF( ID.GT.I CMPX) ICMAX= IC C IF = 1, THIS IS FIRST MLLTIPICP ATICN LEVEL. IFHIC.GT.1)GC TG 4106 IF(IC.LE.C)REtLRN 1 C GET LCCATICN CF VALLES IN TABLE. K= i) IREC (CU MAPT ( 1) *2+2)/2

P-27 DC 4107 s=1,4 DC 410? I=1,4 K=K+1 C PUT VALUES IN TIAT. 4107 TMAT(I, J)=TABLtE ) RETURN 1 C IF THIS IS NOT THE FIRST LEVEL ECWN, PULTIPLY THE NEW MATRIX C INTO WHAT CAPE BEFORE. 4106 CC 4105 J=1,4 00 4105 =l1,4 41C5 TMAT1( I,J )=TkAT ( I,J IARG=IDIREC(CURMAT ( IC )42+2 )/2+1 CALL MATPLT(TMAT,TABLE( I ARG ) TAT1 ) C WE TRANSFERRED TO HERE ONLY AS A DUMMY, FOR MATRICES. THIS CASE C CAN NEVER EE R EACFEC 2000 RETURN 1 20C1 IF(BATCH)CALL LCCLNT({31 PRINT 2C02,GLTPIS(3) 2CC2 FORMAT('C***CRAWL ERRCP - ATTEMPI TC PLACE EYEPCINT IN SAME X-Y'/ *' PLANE AS PCINT TC BE CRAiN. EYEPCINT wAS AT Z =',F10.3) CALL ABCPLF 23) RETURN 2 ENTRY VIEWXY IX=l IY=2 RETURN ENTRY VIEWZY IX=3 IY=2 RETURN ENTRY VIEWXZ IX=1 I Y=3 RETURN END C C PAD C C THIS FLNCIICN SEARCHtS TFE CHARACTER STRING PASSED AS ARGUMENT C FUR AN'a (AT-SIGN) AND REPLACES IT AND) EVERYTHING TO C ITS RIGHT WITh BLANKS (UP TC A TCTAL ARGUMENT LENGTH OF C EIGHT. ) THIS IS DESIGNED TL CVEFCCP E A SPECIFICATION IN THE C FORTRAN IV RUNhING IN 1T S - THE LITERALS ARE NOT INITIALIZED C AND CAN TFUS CCNTAIN MISC. LEFI-CVER TRASH - VERY C UNDESIRPEBLE CN CCMPARES. THE CETAILS WILL VARY ON DIFFERC ENT MACHINES ANC AT CIFFERENT INSTALLATICNS. NOTE THAT ALL C THIS CCES IS EL IMI IATE TFE REUI[REMENT THAT ALL 8 CHARACTERS C INCLUDING TRAILING BLANKS BE KEYFUNCFED BY THE USER. REAL FUNCTICN P[L*8 ( NA/1) REAL*8 NA tNAP1 INTEGER ET 1,VAL /ZCCOCC7C /,TNAM,PL 1,ACRCF NAM=NAM1 DC 10 1=1,E TNAM=GET1(ALPCF( AM), -1 IF(TNAM.E —.VL GC TC 20 1C CCNT I NUE PAD=NAM RETURN 2C DC 40 J=I,8

h-28 4C CALL PUT1(ACROF(NAM),J-1,' ) PAU=NAM RETURN END C C ARGUMENT CH-ECKING FUNCTICNS -INTECER C C FURTRAN IV (G LEVEL) RUNNING UNCER iTS CCES NUT CHECK C ARGUMENT TYPES. TO PECVIDE ERPCR CHECKING, ALL NUMBERS C PASSEC AS ARGUtdENTS BY TFE USEP ARE RUN THROUGH THESE FUNCC TIONS. THEY CHECK TFE HIGH CRDE PeYTES (ISAKING, THEREFURE, C ASSUMPTI[NS CN TFE ABSCLLUE.SIZES GF THE NUMBERS THEY ARE FUNCTION ICHKF(IANS) C ICHKF CHECKS INTEGER VALLES FCR INTEGER-NESS. CCMMON /VAR/ FTPAX,PTPTfTAEMAXIIAEPTRCIRMAX,DIRPTR, *PTCTR,PTITP~TPTCTR,CPENNAS tGENN/,PNSCAL tNMOVETNSHFT *,LNM NPRTEATCH LOGICAL NSCAL.N CVEt NSFFT NFRTEATCF INTEGER*2 PTAX, TPTPRTAEMAX,TAFTF INTEGER*4 TPTCTR,UPEN,CIRP'AX,CIFPTRPTCTRPT REAL*8 GENNAI CATA MASK /LFCCO(COO/ EQUIVALENCE (IAN,,ltANSl), ( IAANS2) C USERS CF.3C'S AHC ARE HAVING TRCUELE IMPLEMENTING THESE C FUNCTICNS ARE WELCCVE TO AECRESS TFEIR CLESTIONS TO US. IANS1=IANS IF( IANSI)1,5,2 C LAND IS A'BIIT-ISE' LOGICAL FUNCICN. A BIT IS SET IN C THE RETLRNEC VALUE OF LANC IFF TFE CORRESPONDING BIT C IS ON IN BCT- ARGUMNENTS. 1 IF(MASK-LANCI(ANSMASK))4,3,4 2 IF(LAND(ANS1,MASK)) ),3t4 5 ICHKF-=O RETURN 3. ICHKF=IANS1 RETURN 4 ICHKF=ANSI IF(BATCH)CALL LCCUNT () IF(NPRT)PRINT 50C,ANS 1,ICHKF 500 FORMAT(' **-*ARNING. UNEXPECrTEG ECIiAL PCINT FUUND.'F8*.1 1 i, CHANEC TO',156) CALL ACFPTZ(E) RETURN C C ARGUMENT CFECKING FLNCTICNS R- EAL C ENTRY CFECKF(ANS) C CHECKF CFECKS FLOATING PCINT ARGLMENTS. ANS2=ANS IF( IA)1C,5C,2C 1C IF(MASK-L/ANL(I A,ASK) )0,'4C,3C 2C IF(LANL( IA,tASK )3040,C3C 5C CHECKF=C. RETURN 3C ChbCKF=ANS RETURN 40 CFECKF=IA IF(BATCH~CALL LCCLNT(1) IF(NPRT)PRINT 510 i1A,CFECKF

F-29 510 FORMAT(' ***WAN ING. EXPECTED CECIIAL PCINT MISSING.' X, 6, I' CHANCEC TO',F8.l1 CALL ABCRTZ(S) RETURN END C C AUTCMATIC CBJECT-ASSEMBLY CLCSER C C CLOSE ERELY C-ECKS "CPEN\" TC [ETERP IE kHAT'MODE' IS IN EFFECT C TYPE 1 ===> CBJECT DEFINIIICN LNCER WAY C TYPE 2 ===> IATRIX CCMBINATICN ( I CI'MBMAT) UNDER WAY C TYPE 3 ==> ASSEMBLY DEFINITICN cLNCERAY C TYPE 4 ===) I IT WAS NCT CALLEC PRICR TO THIS C TYPE 0 ===> CLEAR SAILING - SHCULO NEVER BE ZER() IF GUT HFRE SUbROUTIIE CLCSE COMMCN /ATAEL/ ICIREC(COO), PCINT(ICCC),TABLE(5O00) COMMON /VAR/ FTIAXPTPTR,TAPEAXtlAETRCIRMAXDIRPTR, *PTCTR,PT,ITP,TPTCTRUPE NAStCGEnAPi,NS(AL,NMOVE,NSHFT *,LM,NPE T,EATCH COMMCN /CLSE/TC(4,4),XhAtE,[IS LOGICAL NSCAL,NMCVENSHFTKFRT,BATCF INTEGER*2 IPCINT (10COGC)ITAELE(1CCCC),PTMAX,PPTTR,TABMAX,TA6PTR INTEGER*4 IDIREC,OPEN,DIRMAXUIRPIR,PTCTR,PT,TPTCTR REAL*8 CIREC(400),UJNAM,CENNAN,>NA/VE ECUIVALENCE (IPOINT(1),PCINT (1,(ITAELE( 1,TABLE(1)l, * (DIREC( 1),I IREC( 1)) GC TO(l CCCCtCC 3CC,40CtCEN 100 IF(BATCH)CALL LCCLNT(2) IF(NPRT)PRINT 101,DIREC(CIRPTR-2) 101 FORMAT{ ***WARNING: FAILURE TC FINISH CBJECT'',A8,1H'/ 1' FINCBJ CALLED FCR YCL.') CALL FINCBJ CALL ABCPTZ(11) RETURN 3CC IF(BATCH)CALL LCCUNT(2) IF(NPRT)PRINT 30 1,DIREC(CIPPTR-2) 301 FORMAT(' ***WARNING: FAILURE TO FINI S ASSEMBLY''',A8,IH'/ 1' FINASP CALLEC FCR YOC.') CALL FINASP CALL ABCFTZ(12) RETURN 200 IF0dATCF)CALL LCCLNT(2) IF(NPRT)PRINT 50C,XNAE 5C0 FORMAT(t ***WARNING: FAILURE TC ENC CItEAT('',fA8,2H')/ 1' ENCCMb CALLED FCF YeL.') CALL ENLCM8 CALL ABLRTZ(13) RETURN 4CO IF(BATCh)CALL LCCUNT(2) IF(NPRT)PRINT 4C1 4C1 FORMAT (' *** APNING - FAILLRE ro CALL INIT.' CALL INIT CALL ABORTZ(14) RETURN END C C I'ATIFLT C C MATMLT ISUiTIPLIES ThC FCUR-eY-fCUR tATRICES TUGETHER

C = B * C SLBROUTINE ATPLITA,iC) REAL A(4,4),e(4, 4),C(4,4) 00 1 1=1,4 DO 1 J=1,4 1 A(JI)=C. DC 2 K= 1,4 DC 2 J=l,4 DC 2 1= 1,4 2 A(IK)=A(I,K)t+(,K)*((I,J) RETURN C C PCINT MULTIPLICtTICN RCUTINE C C PTPLT PULTIPLIES A CNE-BY-FCUR BY FCUR-BY-FOUR C G = P * F ENTRY PTMLT(C,P,F) REAL*4 C(4),P(4),F(4,4),TA(4,4) 00 101=1,4 1C C(I)=O. DC 20 1=1,4 DO 20 J=1,4 20 G( [)=OI)+PU(J)*F(iJ RETURN ENTRY ICENT(TA) C IDENT SETS LP A 4-BY-4 ICENTITY MATRIX DC 3 I=1,4 CC 3 J=1,4 TA(J, )C. IF I.EQ.J)TA(I, J )=1. 3 CCNTINUE RETURN END C C RETRIEVAL SLBRLT INE C C RETREV CICS CLT OF Ti-F TA LLES tNC LISPLAYS TlHt VALUt ASSltCIATf' C rnITH Th-E NAME GIVEN AS /AC-UWENT. FCUp I YPF)5<' Ali: P(jS'I, Lf: C A) CBJECT (TYPE 1) C b) ASSE ELY < (T'PE 3) C C) TRANSFCRPATILIN MATRIX (TYPE 2) C D) TRANSFCRECD CBJECT CR ASSEMELY (TYPE 4) SUBROUTINE RETKEI(TSTNAt,*) CGMMCN /ATAEL/ ICIREC( CO), PCINT(5(CO),TAB LE(5000) CGMMON /VtR/ FTMAX,PTPTR,lTAEIAX, IIAEPTRIOl RAX, IRPTR, *PTCTRPT, ITPtTPTCTR,CPENt, AS CENNAMNSCAL NMOVEtNSHFT *,LNM, NPRT,BATCH LCGICAL NSCALNMCVE,NSHFTNFRT,BATCF INTEGER*2 IPCINT ( 1000 ) I TAELE ( OOCO,PTMAX, PTrTR TABMAX, ABPTR INTEGER*4 I3I[REC,UPEN,CIRPAX, IPTR,PTCTR,PT, TPTCTR REAL*8 LIREC(4CO ),OBJNAv, GENNAM E(UI VALENCE ( IPC INT( 1),PCINT (1) (ITALE( 1 ),TABLE(1)), * (DIREC( 1 ) ICIREC( ) REAL*8 T SThAN, FCLND, XFCLNC, kAM,PAC C DUES HE EELCNG HERE (SHCULC tE HAVE FINISHED SOMETHING UP?) IF(OPEN.NE.CICA/LL CLCSE CPEN=O NAM=PAD( TSTIAM) C FINC TFE NAME. TYPE IN ITYP,LGCT ICh IN It-IND

H-'1 C IF NCT FCLNhO CC TCG SS CALL FNCNAP( IFINNAM, ITYP, S8) C INDEX INTE THE NAMES TAELE ISTART=ICIREC(IF IN0*242 ) IGO= I TYP C GO TO THE RIGHT PLACE. GC TO(10CC,2COC, 30lC,40CO ), IGC S58 IF(BATCH)CALL LCCLNT(2) PRINT 10,NAP,NAV 1C FCRMAT (C***CRAWL ERR[R-''',,2h (,Z16, ) NOT FOUNOD BY RETRFV' ) CALL ABLRTZ(10) RETURN 1 C GET ThE NAtE FhCM STCRA-E 1000 FOUND=DIREC(ITABLE(ISTART-1)) C SET UPPER AND LOWER BOUNDS CN CC LCCP TC DIG OUT POINT VALUES ILC iR= ISTART + 3 IUPPR=ILChR+(ITAELE ISTART+1)-1*2 IF(BATCH)CALL LCCUNT( 3 PRINT llClFCUNIC,ITABLt( ISTART+1) 1101 FCRMAT'OCCBJECT'"'A8,"'' HAS'I4,' FCINTS:'/ 1' SWITCH XsX,''8X,'Z'8XX,'') C INDEX THRCLGF FCINTS TABLE SETTING UP PRINT LINES DC 1010 J=ILChB, IUPPR,2 NCX= ITABLE (J)1 KUPPR=NDX+3 IF(BATCt-)CALL LCCLNT(1) 1010 PRINT 11C2,IIABLE(J+1 ),(FCINT(K,K=NCX, UPFR) 1102 FCRMAT(3XI2,42X~,F7.2 ) RETURN C GET THE \NAPE FFCM THE TAELE 2000 FCUND=DIREC(ITABLE(ISTART-1)) IF( ATCH)CALL LCCLNT(6) PRINT 2102,FCLNC 21C2 FORMAT(' TRANISFCf;ATICN MATRIX'* A8,''' IS:') C SET THE UPPER AND LCWER BCUNCS Ch PRINT STATEMENT TO C DISPLAY THE VALUES IN TFE MATRIX ILCWR=( ISTART+2)/2 IUPPR=ILCWR+15 PRINT 21C3(, (HABLE(K),K=ILCR, ILPFR) 2103 FCRMAT(2XF7. 3,2X, F7.2X, F. 3, 2X,F7.3) RETURN C GET TFEE NAPE FFCM ThE TABLE 3000 FOUND=DIREC(ITAELE(ISTART-1)) C NUM IS TFtb NLMEER OF ELEMENTS IN ThE ASSEMBLY NUM=ITABLE (ISTAR+3) IF(BATCH)CALL LCCUNT(2) PRINT 31C1,FCUNGNUI 31C1 FCRMAT( CSIPFLE ASSEMBLY 1''Ae~8' FPHS'13,' ELEMENTS:') C SET DC LCCP LI FITS NLCWR=I START+5 NUPPR=NLChR+NU- 1 DC 3103 K=NLCWR,NLPPR IF(bATCH)CALL LCCUNT(l) C USE ITABLE(K) AS SUBSCRIPT FCP INME IABLE 3103 PRINT 3102,UIREC(ITABLE(K)) 3102 FORMAT{2X,Ae) RETURN C GET ThE NAME GF ThE ENTITY IN CLESTICN 4000 FOUND=DIREC(ITAeLE( ISTART-1))

C GET ThE NAME CF THE TRANSFCRMATICNI MATRIX ASSOCIATED WITH IT XFUUND=DIREC(ITAELE ISTART+1) ) C GET TFE NAME CF THE SCLRCE ENTI1Y NAM=DIREC( ITAULE(START+2) ) C PRINT TFE HHCLE MESS CUT IF(BATCH)CALL LCCLNT(2) PRINT 4101,FCUNC,NAM,XFCUNC 41C1 FCRMAT('O',A8, = A8, *'t8) RETURN END C C CFeCBAT C SUBROUTINE CMEPA1(OBJNAP ) CUMMON /VAR/ PTMAXTPPIR,TAEMAX, AEPTR,CIRMAXDIRPTR, *PTCTR,PTITlfTPTHCTkRCPENNASMCENNPtNSCALtNMOVENSHFT * LNM NPRI, BATCH CCPMCN /CLSE/TC ( 4) XNhAE, ISW INTEGER*2 PTMAX,FTPTR, TAEMAX, ABFT INTEGER*4 DIRMAX,D RPTR,PTCTPTR,OTFTCIROPEN,Q(2)/' 001234'/ I MASK/ZOCCCACO/,INCR/ZOCOCCF6C/ LCGICAL NSCALNMCVE,NS-FT,NPRT,ETC( REAL*8 T LATE, RCTX RO t RCTZ CSCALE PtRPC, NEWNAM GENNAM OBJNA M 1 ROTXD,RCTYC,PRT ZC,RTI1,PCT2,RCT EQUIVALENCE ( 1 },EWtNAI) REAL TC(4,4),Te(,4) TA(4,4) IF (UPEN.NE.C CALL CLCSE C DOES HE BELCNG HERE? SET CPEN TC C(IBMAT STAfUS CPEN=2 XNAME=UEJNA. C ISW=1 ===> T-AT ThE c INGLE-TIRANSFCRIATION-MATRIX-DEFINING C FUNCTILNS hHEN USED hILL BE A PART CF A CMBtMAT SEQUENCE. AS C OPPOSEC TG EEING A PART CF A CALL TC TRANSF. ISW=1 C SET UP AN ICENT11Y MATRIX DL 1 I=1,4 DC 1 J=,14 TC( I,J=C. IF( I.EQ.J)TC ( IJ )-=L 1 CCNTINUE C TA IS A WCRK IMATRIX, INTC HFIC- Th-E PIECES FROM CALLS TO C THE SINGLE-TRANSFCRMATICN-MATRIX-CEFINI G FUNCTIONS ARE COLLC' C tD. TC hILL RECEIVE THE PRCCUCT CF TA AND Tb (WHERE TB CARRIES C THE CUMULATIVE PRODUCT FCR TFE ENTIRE SECUENCE.) C TD IS A CCFY CF TC, WhICH ILL BE THE AkGUMENT TU NMTRA1, C ALCNG WNITH GBJNAMt wEN ENCCMBf IS FINALLY CALLED. 2 DC 3 J=l,4 DC 3 I=1,4 TC( I,J)=TC ( lJ) TE(I,J)=TC(I,J) TA(I,J)=C. IF(I.EQ.j) TA(I,J)=1. 3 CCNTINUE CMBMAT=NEWhAM RETURN C ALL ThE SINGLE FUNCTICNS PEPFCFIM IN\ THE SAME MANNER AS C TRLATE. AN EXPCSITICN IS FRCV[CEC FCR TRLATE GNLY. ENTRY TRLAlE(CX,CY,C7) C IF TRANSF IS LSING IT, INIT1hIIZE TA

F-23 IF( ISW.NE 1 )CALL IDET (TA) C INSERT TFE VALLES IN ThE APPROPRIATE PATRIX LOCATIONS TA(4,1)=CFECKF(CX) TA( 4,2 ) =ChECKF (C TA(4,3 )=CFECKF(Z ) C IF PART LF A CPBMAT SEQUENCE, IC 95 TO MULTIPLY IT ALL TOGETHER IF( SW.Et.l)GC TC 99 C CTFERWISEt E FAVE TC GENERATE A NAE Q(l)=Q( 1I+256 I F (LAND(MASK,Q( ) ). E.ASK (= ( 1 ).: i I NCR C AND CALL NAMTRA (ACTUALLY AN ALTERNATE ENTRY) CALL NMTRA l(NEhN, TA, &9 ) TRLATE=NEsNAM RETURN ENTRY RCTXC( e A=3. 1415S*CFECKF B) /1eC GO TO 50 ENTRY RC1T(A) ENTRY RCTX(t) 50 IF(ISw.NE.1)CALL IDENT(TA) TA(2,2)=LC S (CHECKF(A) ) TA(2,3=SIN(CHECKF(A) ) TA(3,2)=-S l (CFECKF(A) ) TA(3,3)=CCS(CHECKF(A)) IF( ISW.EC.1GC TC 99 Q(1)=Q( 1)+256 IF(LAND( MASK C(1 )). EQ.*VASK ) (1 )= ( 1 + INCR CALL NMTRA1 (NEWN tv,TA, &99) 80TX=NEWNAI RCTXDO=NE NAM HCT1 =NEWhAM RETURN ENTRY ROTYL((e A=3.l41lS*CHECKF(E )/IdG. GC TO 51 ENTRY ROT2(A) ENTRY RUTY(A) 51 IFl SW.NE.1 CALL IDENT(TA) TA( 1l)=CCS(CHECKF (A TA(1 3)=-SIN(ChECKF(A)) TA(3,1)=SI (CHECKF(A ) TA 3,3)=CCS(CHECKF( A) IF(ISW.EC.1)GC TC 99 ( )=Q( 1 +256 [F(LAN'('ASKQ(l )).E.MASK)C(1 )=C( 1)4INCR CALL NMT PA1 (NE N TA,&999) RCTY=NEWhNA RCTYD=NE kNAM RCT2=NEhNA RETURN ENTRY RCTZC(E) A-=CHECKF ( ) *3.14 159/1 eG. GC TO 52 ENTRY RCT3(A) ENTRY RCTZ(A) 52 IF(I [S.NE.1)CALL IDtNT(TA) TA(1,1)=CCS(CHECKF(A) TA(1,2)=SIN(CHECKF(A)/ T(2,1) =-S IN (CIECKF (A) t

H-34 TA( 2,2)=CCCS(Ct:CF(A) 1F ISW.EC.)CGG TC 99 Q( 1)=Q( I )+25f IF (LAND( IASK,Q( 1 ) ). EQ.ASK )C (I ) = 1)4+ INCR CALL NMT RA1 (NEiNN iM,TA,& S9 RCTZ=NEAfvM RCT3=N~EWAM RGTZO=NEWNAM RETURN ENTRY CSC LE(S) IF(ISW.NE.1)CALL IDENTITA) TA4,4)}=CFLECKF(S) IF(ISw.EC.1)CC TC 99 Q( 1)=Q( 1+256 IF(LANDIMASK,Q( 1 ) ).EQ.MASK )G( 1)=(( 1 )1INCR CALL NMTRA (NEihNA, TA, &9 ) CSCALE=NEWhA'A RETURN ENTRY PEPSPC(CZ) IF(ISW.NE. 1CALL IDENT(TA) C CHECK AN SEE IF HE tAhNS TC DIVIDE BY ZERO IF ISW EQl..ANC.ABS(CHECKF (CZ)).T..COlGL TO 99 IF( ISW.EQ.O.ANC.ABS(C-ECKF(CZ ).LT..CCI)GC TO 98 TA( 3,4) = -./CZ SE IF( I[S.EE.C-CC TC 99 Q(1)=Q( 1)+256 IF (LAND(PASK,(Q(1 )) EQ.PASK )C(1 )=C( 1) INC CALL NMTRAli(NENAP,TA,&999) IF(LANU( IASK, ( 1 )).EQ.ASK ) 1( 1 )=C( 1 )+ INCR PERSPC=NEWNAA RElURN C MULTIPLY IT ALL TCGETF-ER, A CC C ACK TU 2 TU MAKE COPIES C AND INITIAIIZE THE ARRAYS ihIC- NEEC INITIALIZING. 99 CALL MAT'LT(TC,TA, TB) GC TO 2 S99 RETURN END

APPENDIX I Alphabetical List of DRAWL Subroutines

APPENDIX I - INDEX OF DRAWL SUBROUTINES Name Definition References ABORT D3 El, E2, H4 CMBMAT D4 D5, D6, El, E2, E3, H32 CSCALE D4 D5, D6, H34 DISPLA B22 C2, H18 DRAW B16 10, 12, B18, B19, 20, B21, B22, C2, C4, C5, E2, E3, F1, F4, H17 ENDCMB D4 D5, D6, El, H14 FINASM Bll 2, 6, 8, El, F4, H14 FINOBJ B8 2, 5, 12, El, F1, F4, GCl-, H13 INCRPT B7 2, 5, B2, B4, B6, D1, El, E2, H8 INIT B1 12, C2, C3, C4, C5, C6, C7, El, F F F4, H1 INVA D1 D1, H8 INVA2 D1 D1, F4, H8 INVR D1 D1, H8 INVR2 D1 D1, H9 LCOUNT D7 C7, H5 MOVE C4 B16, Cl, H4 NAMASM B9 2, 6, 8, 12, B10, E2, E3, F4, Hll NAME B10 2, 6, 8, 12, El, E2, F4, G1, Hl2 NAMOBA B3 B6, H6 NAMOBJ B2 2, 5, 12, B3, B4, B6, E2, E3, F1, F4, G1, H5 NAMOBR B4 B6, B7, El, H6 NAMTRA B12 4, 8, 12, B13, D5, D6, El, E2, Fl, F4, G4, H9 NMTRAl B13 El, E2, H9 NOMOVE C4 B16, C1, C5, H4 NOPAGE C7 C1, H4 NOPRNT C6 B1, C1, D7, H4 NOSCAL C2 B16, B18, C1, H4 NOSHFT C3 B16, B18, C1, H4 PAGE C7 Cl, H4 PERSPC D4 D5, D6, H34 POINTS B5 2, 5, 12, B2, B3, B7, D1, El, E2, Fl, F4, G1, G4, H7 PRNT C6 B1, C1, H4 PRTOUT B20 11, C2, C3, C4, Hi8 PRTPLT B19 11, B20, C2, C3, C4, E2, E3, H18 PRTPUT B21 11, C2, C3, C4, H18 RETREV D2 E3, H30 ROTX D4 D5, H33 ROTXD D4 D5, D6, H33 ROTY D4 D5, H33 ROTYD D5 D5, H33 ROTZ D5 D5, H33 -I1

APPENDIX I - INDEX OF DRAWL SUBROUTINES (cont'd.) Name Definition References ROTZD D5 D5, H33 ROT1 D4 D5, H33 ROT2 D4 D5, H33 ROT3 D5 D5, H33 SCAL C2 B16, B18, C1, C3, C4, H4 SHFT C3 B16, B18, C1, C4, H4 SHOW B18 10, B21, C2, C3, E2, E3, H18 TDUMP D2 E3, H3 TRANSF B14 4, 10, 12, D6, E2, F1, F4, Gl, C4, 1-115 TRLATE D4 D5, D6, H32 VIEWXY C5 B16, C1, H27 VIEWZX C5 B16, H27 VIEWZY C5 B16, H27 VISA D1 D1, F4, H8 VISA2 D1 D1, HO VISR D1 D1, H8 VISR2 D1 D1, H9 -12

Security Classification DOCUMENT CC NTROL DATA - R & " _ Secwrity ecla. iqiretion of title, body >::..'tr,.'i.':i.!: -......:::..... ORIGINATING ACT IVITY (Cor(orateautror),.. - SESUk.TY CLASS FICAT ION UNIVERSITY OF MICHIGAN Unclassified CONCOMP PROJECT 3. REPORT TITLE DRAWL 70: A COMPUTER GRAPHICS LANGUAGE C. DESCRIPTIVE NOTES (Type. of report and inc.tlsive dates) Technical Report 5. AUTHOR(S) (First name, middle initial, last name) B. HERZOG and FRED SHADKO 6. REPORT DATE ic?. TOTA.L An3. OF PAG ESb.. F REFS August 1970 12 0 6a. CONTRACT OR GRANT NO. ca. ORIGINATOR'S REPORT NUMBER(S) DA-49-083 OSA-3050 ( Technical Report 30 b. PROJECT NO.' 9b. OTHER REPORT NO(S) (Any other numbers that may be assigned c*. s this report) d. _ 10. DISTRIBUTION STATEMENT Qualified requesters may obtain copies of this report from DDC. 1.;'CL E M E N T R Y N C E"S i'2. SPONSORING MILITARY ACTIVITY! |ADVANCED RESEARCH PROJECTS AGENCY 13. ABSTRACT The DRAWL language provides a simple means of defining a graphical composition and specifying operations on it. A catalog of parts is kept; any defined item may be re-used any number of times. Changes in viewing angle, scale, absolute location, and projection are easily affected in three dimensions via homogeneous coordinate projective geometry. Graphical output is available on cathode-ray tube-displays, digital-incremental plotters, and online computer line-printers and remote printing terminals. DD 1FNoRM 6l1473 Unclassified Security Classification

LINK A LINK B LINK C KEY WORDS.K.E..Y WOR,'DS ROLE WT ROLE WT ROLE W T graphical languages drafting languages coordinate geometry Unclassified Security Classification

16 April 1971 DRAWL 70: A Computer Graphics Language B. Herzog and F. Shadko ERRATA * Page 8, line 18 should read: ARG(3,1),ARG(3,2),ARG(3,3),ARG(3,4), Page 11, 8th line from bottom should read:'NAMEOFOBJ' String too long Page A-11, replace a' with z in Figure A-7. Page B-7, replace the COMMENTS with: INCRPT executes: Proper execution requires at least one prior call to POINTS. INCRPT obtains the coordinates of the immediately previously-defined point and computes and stores, via a call to POINTS, the absolute coordinates for the point whose data is specified in the call to INCRPT, i.e. in effect there results: CALL POINTS (ISMT,PX/PW+X/W,PY/PW+Y/W,PZ/PW+Z/W, 1.) where PX,PY,PZ and PW are the homogeneous coordinates of the previously-defined point. In the event that no previous point has been defined, an error, then a warning is announced and the values of (0.,0.,0.,1.) are assumed and inserted for the missing data. The warning reads: ***WARNING - THERE IS NOTHING TO USE AS BASE FOR RELATIVE OR INCREMENTAL CALL (0.,0.,0.,) ASSUMED. Page H-ll, delete 12th to 16th lines from bottom, i.e. remove: C NAMSUB WAS USED... LEFT IN FOR COMPATIBILITY Page H-13, insert "IF(NUP.EQ.0)GO TO 101" between lines 14 and 15: [L. 18] NUP=DIRPTR-2 IF(NUP.EQ.O)GO TO 101 [L. 19] DO 100 J=2,NUP,2 Page H-13, line 31 should read: 101 RETURN 1 Page H-14, delete line 19, i.e. remove: IF WE KEEP NAMSUB. WE JUST GOTTA HAVE A FINSUB *Underlines indicate corrections.