00050 .t FGP34 DOCUMENTATION 00100 .c;FGP34 Documentation 00150 .c;U.T. Austin 00200 .c;1Nov78 00250 .s 4 00300 ^&INTRODUCTION\& 00350 .s 2 00400 FGP34 is Vector General's &FORTRAN &Graphics &Package 00450 for the VG&3&400 series and is based on the proposed ACM Core 00500 Standards effort. Extensions are provided to support certain 00550 hardware features such as dynamcic graphics and hardware transforms. 00600 .s 00650 This manual is divided into sections: 00700 .lm +5 00750 1.##Identification of routines by classes (e.g. initialization 00800 routines versus beam positioning). The routines are not discussed. 00825 .br;2.##Glossary of terms. 00850 .br;3.##An alphabetic listing of routine descriptions. 00875 .br;4.##Program loading. 00880 .br;5.##Errors. 00885 .br;6.##Index. 00900 .s 2 00950 .lm 0 01000 .index Routine Classes 01050 1.##^&ROUTINE CLASSES\& 01100 .s 2 01150 1.1##^&Initialization\&#-#Two routines are required to initialize 01200 .index Initialization 01250 FGP34: 01300 .ts 12 01350 .br; VINIT 01400 .br; VINILU 01450 .s 2 01500 .index Termination 01550 1.2##^&Termination\&#-#One routine terminates FGP34: 01600 .br; VTRMLU 01650 .s 2 01700 .index Beam Positioning 01750 1.3##^&Beam Positioning\&#-#Beam positioning without drawing 01800 is done by the VMOVxx routines. 2-D ,3-D,absolute or relative 01850 routines are available: 01900 .br; VMOVR2 01950 .BR; VMOVR3 02000 .BR; VMOVA2 02050 .BR; VMOVA3 02100 .s 2 02150 .index Vector Drawing 02200 1.4##^&Vector Drawing\&#-#Single vector draws are done with 02250 VLINxx, available in 2-D versus 3-D, and absolute versus 02300 relative: 02350 VLINR2 02400 .BR; VLINR3 02450 .BR; VLINA2 02500 .BR; VLINA3 02550 .s 2 02600 .index Polyline Drawing 02650 1.5##^&Polyline Drawing\&#-#Polyline drawing routines (e.g. plotting 02700 an array of vetors) is done with VLNSxx routines. Versions 02750 are 2-D versus 3-D, and absolute versus relative: 02800 .BR; VLNSA2 02850 .BR; VLNSA3 02900 .BR; VLNSR2 02950 .BR; VLNSR3 03000 .s 2 03050 .index Points 03100 1.6##^&Points\&#-#A point is drawn either in 2-D or 3-D 03150 absolute: 03200 .BR; VMRKA2 03250 .BR; VMRKA3 03300 .s 2 03350 .index Text 03400 1.7##^&Text\&#-#Three text output routines provide for text output 03450 at current position (CP), output in upper left hand corner, or position defined 03500 output: 03550 .BR; VTEXT 03600 .BR; VPAG00 03650 .BR; VPAGXY 03700 .s 2 03750 .index Circles 03800 .index Arcs 03850 .index Rectangles 03900 .index Cubics 03950 1.8##^&Circles,Arcs,Rectangles,Cubics\&#-#Routines for drawing 04000 circles,clockwise arcs, counterclockwise arcs, rectangles, and 04050 3-D cubics are: 04100 .BR; VCIRIC 04150 .BR; VCARC 04200 .BR; VCCARC 04250 .BR; VRECT 04300 .BR; VPOSN 04350 .BR; VCUBIC 04400 .s 2 04450 .index World Coordinates 04500 1.9##^&World Coordinates\&#-#Routines are available to overide 04550 the default software boundaries of the user's World Coordinate 04600 system (WCS) for the x-y window, z window, and viewing angle: 04650 .BR; VSEWND 04700 .BR; VSEDEP 04750 .BR; VSEANG 04800 .s 2 04850 .index Line Style 04900 .index Character Style 04950 1.10^&##Line#and#Character#Style\& #-#Routines are provided to 05000 define the current line style (e.g. solid), text style (e.g. small), 05050 and other attributes such as intensity: 05100 .BR; VMODE 05150 .BR; VMDINT 05200 .s 2 05250 .index Hardware Transforms 05300 1.11##^&Hardware#Transforms\& #-#Routines to directly exploit 05350 the VG hardware affect hardware registers while similar sounding 05400 routines affect only software boundaries (e.g. VTWNDO affects 05450 hardware windowing while VSEWND affects software). Routines 05500 beginning with VT do hardware rotation transforms, windowing, 05550 viewports, and depth-cueing. Remember, the hardware registers 05600 must be setup prior to the actual drawing of the item to be 05650 affected: 05700 .ts 12,25 05750 .BR; VTDXYZ DISPLACE XYZ XFORM 05800 .BR; VTS SCALE 05850 .BR; VTRX X XFORM 05900 .BR; VTRY Y 05950 .BR; VTRZ Z 06000 .BR; VTRXYZ XYZ 06050 .BR; VTPOP POP XFORM 06100 .BR; VTWNDO WINDOW 06150 .BR; VTVIEW VIEWPORT 06200 .BR; VTDEPQ DEPTH-CUEING 06250 .BR; VTMARK MARK 06300 .s 2 06350 .index Groups 06400 1.12##^&Groups\& #-#The simplest organizational level is an 06450 element (e.g. vector). Elements may be grouped together logically 06500 due to common styling or because they belong to a common pick 06550 identification group (light pen returns group name when any of 06600 its elements are picked): 06650 .BR; VBGGRP 06700 .BR; VMODE('PICID' 06750 .br;The default group name is 'MAIN-PIC'. 06800 .s 2 06850 .index Segments 06900 1.13##^&Segments\& #-#Groups that have transformations in common 06950 belong to a segment. Segments may be created, ended,deleted, emptied, 07000 or re-opened. Segments may be nested (a segment begun without 07050 ending a previous one): 07100 .BR; VBGSEG 07150 .BR; VENSEG 07200 .BR; VDLSEG 07250 .BR; VEMSEG 07300 .BR; VOPSEG 07350 .br;The default segment is 'MAIN-PIC'. 07400 .s 2 07450 .index Objects 07500 1.14##^&Objects\& #-#An object is a collection of segments, may 07550 include transform declarations and be nested. 07600 Objects may be called (instanced). Object declaration 07650 also includes stating the number of local variables to be used 07700 (e.g. dynamic arguments): 07750 .BR; VBGOBJ 07850 .BR; VDLOBJ 07900 .BR; VEMOBJ 07950 .BR; VOPOBJ 08000 .br;The default object is 'MAIN-PIC' with 0 local variables. 08025 The Base Picture Object is the currently displayed object as 08030 .index Base Picture Object 08035 .index BPO 08040 declared by VDSPL. The default BPO is MAIN-PIC. 08050 .s 2 08100 .index Dynamic Variables 08150 1.15##^&Dynamic#Variables\& #-#FORTRAN variables may be 08200 declared dynamic. This can be used to provide dynamic updating 08250 of a picture without the user program redrawing the picture. A 08300 common example is to declare a dynamic variable and use it as the 08350 parameter to a hardware rotation routine (e.g. VTRX). As the 08400 user alters the dynamic variable's contents, the VG automatically 08450 updates the rotation. Note, dynamic variables are always in 08500 integer device coordinates (what the hardware wants) , not in 08550 world coordinate space. To declare a variable to be dynamic: 08600 .BR; VARUSR 08650 .s 2 08700 .index Input 08750 1.16##^&Input\& #-#Input for single key, button, 08800 and light pen are managed with a queue. The desired 08850 class and device can be enabled/disabled and input can waited 08900 on and retrieved. Echo control and positioning is possible: 08950 .BR; VENAB ENABLE DEVICE 09000 .BR; VENABC ENABLE CLASS 09050 .BR; VDISBL DISABLE 09100 .BR; VDISC DISABLE CLASS 09150 .BR; VWAIT WAIT EVENT 09200 .BR; VGET GET IT 09250 .BR; VFLCEV FLUSH 09300 .BR; VFLALL FLUSH ALL 09350 .BR; VSETE ECHO 09400 .ts 15,21,30 09402 .s 09404 ^&name class device physical device\& 09406 .br;pick(pk) 1 1-4 light pen 09408 .br;keyboard(kb) 2 1 not used 09410 .br; 2 keyboard 09412 .br;button(bt) 3 1-32 function buttons 09414 .br;locator(lc) 4 1 tablet 09416 .br; 2 jsx,jsy 09418 .br;valuator(vl) 5 1-10 dials 09420 .br; 11 jsz 09422 .br;GBUS(gb) 6 0-1777 09450 .page 09500 .s 4 09550 .index Glossary 09600 2.0##^&GLOSSARY OF TERMS\& 09650 .s 2 09700 The following is a glossary of abbreviations or terms used 09750 thoughout this manual. 09800 .ts 10 09825 .s;BPO: Base Picture Object (displayed object set). 09850 .s 09900 CP: current position of the beam in WCS. 09950 .br; CP=(CPX,CPY,CPZ) 10000 .s;CPX: x coordinate of the current beam position, in WCS. 10050 .s;CPY: y coordinate of the cuurent beam position, in WCS. 10100 .s;CPZ: z coordinate of the current beam position, in WCS. 10150 .s;DX: relative x coordinate<=.5 fullscale, in WCS. 10200 .br; CPX=CPX+DX 10250 .s;DXARR: an array of relative x coordinates, in WCS. 10300 .s;DY: relative y coordinate<=.5 fullscale, in WCS. 10350 .br; CPY=CPY+DY 10400 .s;DYARR: an array of relative y coordinates, in WCS. 10450 .s;DZ: relative z coordinate<=.5 fullscale, in WCS. 10500 .br; CPZ=CPZ+DZ 10550 .s;DZARR: an array of relative z coordinates, in WCS. 10552 .s;ICL: input class number. 10553 .lm +10;.br;(1 for pick, 2 for keyboard, 3 fo button, 4 for locator, 10554 5 for valuator, 6 for GBUS). 10577 .lm -10 10600 .s;IDC: integer device coordinate space. 10650 .lm +10 10700 .br;The hardware defined boundaries (always integer). The 10750 FGP converts the user's WCS to the hardware's IDC. 10800 Range is [-32k,32k). 10850 .lm -10 10852 .s;IDV: input device number within a class. 10900 .s;text: aphanumeric text terminated by a null (0). 10950 .s;WCS: world coordinate system. 11000 .lm +10;.br;The user defined software boundaries.FGP 11050 converts WCS to IDC for the user. 11100 Default is [0.,1.) with a maximum of [-1.7x10**38,1.7x10**38). 11150 User space is a cube: MIN(xlow,ylow,back) and MAX(xhi,yhi,front). 11200 .lm -10 11250 .s;X: absolute x coordinate in WCS. 11300 .br; CPX=X 11350 .s;Y: absolute y coordinate in WCS. 11400 .br; CPY=Y 11450 .s;Z: absolute z coordinate in WCS. 11500 .br; CPZ=Z 11550 .page;.lm 0;.s 4 11600 3.##^&ROUTINE DESCRIPTIONS\& 11650 .index Routine Descriptions 11700 .ts 5,15,25,50 11750 .s 4 11800 ** 11850 .br 11900 ^&VARUSR VARUSR\& 11950 .index VARUSR 12000 .br;Declare a FORTRAN variable to be dynamic. 12050 .s; CALL VARUSR(DVAR,IUSERV,NAME) 12100 .s; inputs- DVAR: floating point variable,no value 12150 .br; IUSERV: user variable (IDC) 12200 .br; NAME: 8 char literal for table purposes 12300 .s; outputs- DVAR: dynamic variable pointer 12350 .s 2;Declare a FORTRAN variable, IUSERV, to be dynamic. 12400 After it has been declared, use the pointer, DVAR, in place 12450 of any WCS variable in FGP calls. Varying IUSERV with 12500 appropriate IDC values will then result in the picture being 12550 updated. DVAR may be used in calls such as VMOVA2, VTRX, 12600 etc. 12650 .s 4 12700 ** 12750 .br 12800 ^&VBGGRP VBGGRP\& 12850 .index VBGGRP 12900 .br;Begin group. 12950 .s; CALL VBGGRP(GNAME,LINTYP,ICHS,IFNT,IORI,IONOF,ICL) 13000 .s; inputs- GNAME: 8 char (dbl prec) group name 13050 .br; LINTYP: see VMODE 13100 .br; ICHS: see VMODE 13150 .br; IFNT: see VMODE 13200 .br; IORI: see VMODE 13250 .br; IONOF see VMODE 13300 .br; ICL: 0=black and white 13350 .br; 1=yellow 13400 .br; 2=orange 13450 .br; 3=red 13500 .br; 4=green 13550 .br; 5=amber 13600 .s; outputs- N/C 13650 .s 2;Begin a new group (closing any previous group) and set its 13700 attributes. 13750 .s 4 13800 ** 13850 .br 13900 ^&VBGOBJ VBGOBJ\& 13950 .INDEX VBGOBJ 14000 .br;Begin object. 14050 .S; CALL VBGOBJ(ONAME,MAXLC) 14100 .s; inputs- ONAME: 8 char (dbl prec) object name 14150 .br; MAXLC: max number of local variables 14200 .s; outputs- N/C 14250 .s 2;Begin an object. The MAXLC is needed when dynamic variables 14300 are used. 14350 .s 4 14400 ** 14450 .br 14500 ^&VBGSEG VBGSEG\& 14550 .INDEX VBGSEG 14600 .br;Begin segment. 14650 .S; CALL VBGSEG(SNAME,TRNF,ARGS,...) 14700 .s; inputs- SNAME: 8 char (dbl prec.) name 14750 .br; ARGS: 0 or more WCS xform arguments 14800 .br; TRNF: '#'=no xforms 14850 .br;.lm 25;else,literal string denoting the xforms and their order. 14900 Select 0 or more xforms (in any order) from displacement, scale, 14950 rotation,window, viewport, or intensity. 15000 .br;.lm 0 15050 .s; outputs- N/C 15100 .s 2;Begin a new segment and set the hardware transform registers; if TRNF 15150 is '#' (quoted blank), there are no transforms and hence no 15200 arguments (ARGS). TRNF is a literal representing desired 15250 hardware transforms . Parens denote choice and 15300 brackets denote an option within a choice: 15350 .INDEX TRNF 15400 .s; ^&Displacement\& 15500 .br; D[X][Y][Z] 15650 .br; examples: 'DXY' or 'DYZ'. 15700 .s; ^&Scale\& 15750 .br; S 15800 .s; ^&Rotation\& 15850 .br; #(X)[(X)[(Y)]] 15900 .BR; R(Y)[(Y)[(Y)]] 15950 .BR; #(Z)[(Z)[(Z)]] 16000 .br; examples: 'RXXZ' or 'RYXZ'. 16050 .s; ^&Window\& 16100 .BR; C [X] [Y] [W] [H] [N] [T] 16150 .br; X=center X 16200 .br; Y=Y center 16250 .br; W=X size 16300 .br; H=Y size 16350 .br; N=Z near 16400 .br; T=Z depth 16450 .s; ^&Viewport\& 16500 .br; V[X] [Y] [S] 16550 .br; X=X center 16600 .br; Y=Y center 16650 .br; S= size 16700 .s; ^&Intensity\& 16750 .BR; Q[I] [P] 16800 .BR; I=depth intensity range 16850 .br; P=distance from eye to picture 16900 .s 2 16950 Example: 17000 .br; TRNF='DXZRXXZSCXWNTVSQIP' 17050 .br;means displace xz,rotate xzz, scale, window xwnt, viewport s, 17100 and intensity ip. 17150 .s 4 17200 ** 17250 .br 17300 ^&VCARC VCARC\& 17350 .INDEX VCARC 17400 .br;Draw a clockwise arc. 17450 .S; CALL VCARC(XC,YC,XE,YE) 17500 .s; inputs- XC: WCS X centerpoint 17550 .br; YC: WCS Y centerpoint 17600 .br; XE: X endpoint in WCS 17650 .br; YE: Y endpoint in WCS 17700 .s; outputs- N/C 17750 .s 2;Draw a clockwise arc from CP to (XE,YE,Z) using 17800 (XC,YC,Z) as a centerpoint. 17850 .s 4 17900 ** 17950 .br 18000 ^&VCCARC VCCARC\& 18050 .INDEX VCCARC 18100 .br;Draw counterclockwise arc. 18150 .S; CALL VCCARC(XC,YC,XE,YE) 18200 .s; inputs- XC: X centerpoint (WCS) 18250 .br; YC: Y centerpoint (WCS) 18300 .br; XE: X endpoint (WCS) 18350 .br; YE: Y endpoint (WCS) 18400 .s; outputs- N/C 18450 .s 2;Draw a counter clockwise arc from CP to (XE,YE,Z) 18500 using (XC,YC,Z) as the center. 18550 .s 4 18600 ** 18650 .br 18700 ^&VCHGRP VCHGRP\& 18750 .INDEX VCHGRP 18800 .br;Change group transformations. 18850 .S; CALL VCHGRP(LINTYP,ICHS,IFNT,IONOF,ICL) 18900 .s; inputs- see VMODE and VBGGRP 18950 .s; outputs- N/C 19000 .s 2;Alter current group attributes for line style, character size and 19050 font, blinking, and color. 19100 .s 4 19150 ** 19200 .br 19250 ^&VCHSEG VCHSEG\& 19300 .INDEX VCHSEG 19350 .br;Change segment transforms. 19400 .S; CALL VCHSEG(SNAME,TRNF,ARGS...) 19450 .s; inputs- see TRNF in VBGSEG 19500 .s; outputs- N/C 19550 .s 2;Change segment transformation parameters for later items. 19575 Segment must be open. 19600 .s 4 19650 ** 19700 .br 19750 ^&VCIRC VCIRC\& 19800 .INDEX VCIRC 19850 .br;Draw a circle. 19900 .S; CALL VCIRC(XC,YC,R) 19950 .s; inputs- XC: X centerpoint (WCS) 20000 .br; YC: Y centerpoint (WCS) 20050 .br; R: radius (WCS) 20100 .s; outputs- N/C 20150 .s 2;Draw a circle whose centerpoint is (XC,YC,Z) with a 20200 radius of R. CP will be set to (XC+R,YC,Z). 20250 .s 4 20300 ** 20350 .br 20400 ^&VCONTU VCONTU\& 20450 .INDEX VCONTU 20500 .br;Continue GPU. 20550 .S; CALL VCONTU 20600 .s 2;Continue GPU processing. Generally used to restart 20650 GPU after it has been stopped (VSTOP). 20700 .s 4 20750 ** 20775 .br 20800 ^&VDISAL VDISAL\& 20850 .INDEX VDISAL 20900 .br;Disable events for all devices and classes. 20950 .S; CALL VDISAL 21000 .s 2;Disable all event driven input devices and classes. 21050 .s 4 21100 ** 21150 .br 21200 ^&VDISBL VDISBL\& 21250 .INDEX VDISBL 21300 .br;Disable events for a device. 21350 .S; CALL VDISBL(ICL,IDV) 21400 .s; inputs- ICL: class 21450 .br; IDV: device 21500 .s; outputs- N/C 21550 .s 2;Disable input events for a device in a class. 21600 .s 4 21650 ** 21700 .br 21750 ^&VDISC VDISC\& 21800 .INDEX VDISC 21850 .br;Disable events for a class. 21900 .S; CALL VDISC(ICL) 21950 .s; inputs- ICL: class 22000 .s; outputs- N/C 22050 .s 2;Disable input events for all devices within the class. 22100 .s 4 22150 ** 22200 .br 22250 ^&VCUBIC VCUBIC\& 22300 .INDEX VCUBIC 22350 .br;Draw a 3-D cubic curve. 22400 .S; CALL CUBIC(DN,XE,YE,ZE,DXE,DYE,DZE) 22450 .s; inputs- DN: 1/number of segments 22500 .br; XE: X endpoint (WCS) 22550 .br; YE: Y endpoint (WCS) 22600 .br; ZE: Z endpoint (WCS) 22650 .br; DXE: X slope at endpoint 22700 .br; DYE: Y slope at endpoint 22750 .br; DZE: Z slope at endpoint 22800 .s; outputs- N/C 22850 .s 2;Draw a cubic curve with a number of line segments (DN). 22900 VPOSN establishes the beginning point (XB,YB,ZB) and the 22950 slope at the initial point (DXB,DYB,DZB). 23000 VCUBIC defines the endpoint (XE,YE,ZE) and the slope at the 23050 endpoint (DXE,DYE,DZE) and then draws what appears to be a smooth 23100 curve. 23150 .s 4 23200 ** 23250 .br 23300 ^&VDLOBJ VDLOBJ\& 23350 .INDEX VDLOBJ 23400 .br;Delete object. 23450 .S; CALL VDLOBJ(ONAME) 23500 .s; inputs- ONAME: 8 char object name 23550 .s; outputs- N/C 23600 .s 2;Discard object and all associated structure. 23650 .s 4 23700 ** 23750 .br 23800 ^&VDLSEG VDLSEG\& 23850 .INDEX VDLSEG 23900 .br;Delete segment. 23950 .S; CALL VDLSEG(SNAME) 24000 .s; inputs- SNAME: 8 char segment name 24050 .s; outputs- N/C 24100 .s 2;Delete segment and discard all related structure. 24150 .s 4 24200 ** 24250 .br 24300 ^&VDSL VDSL\& 24350 .INDEX VDSL 24400 .br;Deselect monitor. 24450 .S; CALL VDSL(MON) 24500 .s; inputs- MON: monitor 0-7 24550 .s; outputs- N/C 24600 .s 2;Deselect a previously selected monitor. 24650 .s 4 24700 ** 24750 .br 24800 ^&VDSPL VDSPL\& 24850 .INDEX VDSPL 24900 .br;Declare Base Picture Object and display it. 24950 .S; CALL VDSPL(ONAME) 25000 .s; inputs- ONAME: 8 char object name 25050 .s; outputs- N/C 25100 .s 2;Display object and any objects that it calls. 25125 You may display a Base Picture Object as it is being built. 25150 .s 4 25200 ** 25250 .br 25300 ^&VEMOBJ VEMOBJ\& 25350 .INDEX VEMOBJ 25400 .br;Empty object. 25450 .S; CALL VEMOBJ(ONAME) 25500 .s; inputs- ONAME: 8 char object name 25550 .s; outputs- N/C 25600 .s 2;Empty the object leaving the structure intact (i.e. it 25650 can be filled again without beginning it). 25700 .s 4 25750 ** 25800 .br 25850 ^&VEMSEG VEMSEG\& 25900 .INDEX VEMSEG 25950 .br;Empty segment. 26000 .S; CALL VEMSEG(SNAME) 26050 .s; inputs- SNAME: 8 char segment name 26100 .s; outputs- N/C 26150 .s 2;Empty the segment without destroying the structure. 26200 .s 4 26250 ** 26300 .br 26350 ^&VENAB VENAB\& 26400 .INDEX VENAB 26450 .br;Enable events for a device. 26500 .S; CALL VENAB(ICL,IDV) 26550 .s; inputs- ICL: class 26600 .br; IDV: device 26650 .s; outputs- N/C 26700 .s 2;Enable input events for a device within a class. 26750 .s 4 26800 ** 26850 .br 26900 ^&VENABC VENABC\& 26950 .INDEX VENABC 27000 .br;Enable events for a class. 27050 .S; CALL VENABC(ICL) 27100 .s; inputs- ICL: class 27150 .s; outputs- N/C 27200 .s 2;Enable input events for all devices within a class. 27250 .s 4 27300 ** 27350 .br 27400 ^&VENSEG VENSEG\& 27450 .INDEX VENSEG 27500 .br;End segment. 27550 .S; CALL VENSEG(SNAME) 27600 .s; inputs- SNAME: 8 char segment name 27650 .s; outputs- N/C 27700 .s 2;End (close) the named segment. 27750 .s 4 27800 ** 27850 .br 27900 ^&VFLALL VFLALL\& 27950 .INDEX VFLALL 28000 .br;Flush all events. 28050 .S; CALL VFLALL 28100 .s 2;Flush all events from the event queue. 28150 .s 4 28200 ** 28250 .br 28300 ^&VFLCEV VFLCEV\& 28350 .INDEX VFLCEV 28400 .br;Flush all events of a class. 28450 .S; CALL VFLCEV(ICL) 28500 .s; inputs- ICL: class 28550 .s; outputs- N/C 28600 .s 2;Flush all events of a particular class from the event queue. 28650 .s 4 28700 ** 28750 .br 28800 ^&VFLDEV VFLDEV\& 28850 .INDEX VFLDEV 28900 .br;Flush event queue of a device. 28950 .S; CALL VFLDEV(ICL,IDV) 29000 .s; inputs- ICL: class 29050 .br; IDV: device 29100 .s; outputs- N/C 29150 .s 2;Flush all events of a particular device within a class from 29200 the event queue. 29250 .s 4 29300 ** 29325 .br 29350 ^&VGET VGET\& 29400 .INDEX VGET 29450 .br;Get event report. 29500 .S; CALL VGET('PK',IDV,SNAME,GNAME) 29550 BR; CALL VGET('NXSEG',SNAME,LEV) 29600 .BR; CALL VGET('NXOBJ',ONAME,IELEM,LEV) 29650 .BR; CALL VGET('KB',IDV,MAX,ICHARS,N) 29700 .s; inputs- IDV: device number from VWAIT 29750 .br; MAX: max number of characters 29800 .br; ICHARS: empty byte array of MAX length 29850 .s; outputs- SNAME: 8 char segment name 29900 .br; ONAME: 8 char object name 29950 .br; GNAME: 8 char group (pickid) name 30000 .br; LEV: level of next higher segment/object 30050 .br; IELEM: element number in object of hit 30100 .br; ICHARS: array of N characters read 30150 .br; N: number of characters read 30200 .s 2;Get event report for either the pick or keyboard. In the case 30250 of pick data, higher level structures can be ascertained ('NXxxx'). 30300 .s 4 30350 ** 30400 .br 30450 ^&VGOOB VGOOB\& 30500 .INDEX VGOOB 30550 .br;Call object. 30600 .S; CALL VGOOB(ONAME,TRNF,ARGS...) 30650 .s; inputs- ONAME: 8 char object name 30700 .br; see TRNF in VBGSEG 30750 .s; outputs- N/C 30800 .s 2;Call a subobject (sometimes called instancing). The 30850 transforms are nested followed by a GMARK followed by the 30900 call to the object. 30925 This structure| means that the transforms will still be in 30937 force after the subobject returns. 30950 .s 4 31000 ** 31050 .br 31100 ^&VGOOBP VGOOBP\& 31150 .INDEX VGOOBP 31200 .br;Call object with protection. 31250 .S; CALL VGOOBP(ONAME,TRNF,ARGS...) 31300 .s; inputs- ONAME: object name (8 chars) 31350 .br; see TRNF IN VBGSEG 31400 .S; OUTPUTS- N/C 31450 .s 2;Call subobject (instance object) with extra protection. 31500 Call puts GMARK followed by nested transforms followed by 31550 GMARK followed by subobject call and three pops. 31575 This structure insures that the TRNF transforms only effect the 31587 subobject. 31600 .s 4 31650 ** 31700 .br 31750 ^&VINILU VINILU\& 31800 .INDEX VINILU 31850 Attach graphics device to lun. 31900 .S; CALL VINILU(LUN) 31950 .s; inputs- lun: logical unit number of GS: 32000 .s; outputs- N/C 32050 .s 2 32100 VINILU declares the lun to be used by FGP to access the 32150 graphics device GS:. This call should follow the call to 32200 VINIT. The lun assigned must be the same as the ASG 32250 option at TKB: 32300 .br; ASG=GS:3 32350 .br;This means that lun=3. 32400 .s 4 32450 ** 32500 .br 32550 ^&VINIT VINIT\& 32600 .INDEX VINIT 32650 .br;Initialize FGP. 32700 .S; CALL VINIT 32750 .s; inputs- none 32800 .s; outputs- none 32850 .s 2;VINIT initializes FGP and must be the first FGP 32900 call made. VINIT establishes defaults for the world coordinate 32950 space and creates a default BPO, object, segment, and group as well as 33000 establish default line style and character style: 33050 .ts 5,20,35 33100 .s 1 33150 .nf 33200 min(x,y,z) (0.,0.,0.) lower left back 33250 max(x,y,z) (1.,1.,1.) upper right front 33275 open BPO MAIN-PIC base picture object 33300 open object MAIN-PIC no locals 33350 open seg MAIN-PIC 33400 open group MAIN-PIC 33450 char size 1 small 33500 char font 1 standard 33550 char place 1 0 deg rotation 33600 line style 1 solid 33650 intensity .5 1/2 33700 clip xy 0 no 33750 clip z 0 no 33800 perspec 0 no 33850 .f;.ts 5,15,25,50 33900 .s 4 33950 ** 34000 .br 34050 ^&VLINA2 VLINA2\& 34100 .INDEX VLINA2 34150 .br;Draw a line to a 2-D absolute coordinate. 34200 .S; CALL VLINA2(X,Y) 34250 .s; inputs- X: 34300 .br; Y: 34350 .s; outputs- N/C 34400 .s 2;Draw a line from the current position to the new current 34450 position: 34500 .br; CP=(X,Y,CPZ) 34550 .s 4 34600 ** 34650 .br 34700 ^&VLINA3 VLINA3\& 34750 .INDEX VLINA3 34800 .br;Draw a line to a 3-d absolute coordinate. 34850 .S; CALL VLINA3(X,Y,Z) 34900 .s; inputs- X: 34950 .br; Y: 35000 .br; Z: 35050 .s; outputs- N/C 35100 .s 2;Draw a line from the current position to the new current 35150 position: 35200 .br; CP=(X,Y,Z) 35250 .s 4 35300 ** 35350 .br 35400 ^&VLINR2 VLINR2\& 35450 .INDEX VLINR2 35500 .br;Draw a line to a relative 2-D coordinate. 35550 .S; CALL VLINR2(DX,DY) 35600 .s; inputs- DX: 35650 .br; DY: 35700 .s; outputs- N/C 35750 .s 2;Draw a line from the current position to the new current 35800 position: 35850 .BR; CP=(CPX+DX,CPY+DY,CPZ) 35900 .s 4 35950 ** 36000 .br 36050 ^&VLINR3 VLINR3\& 36100 .INDEX VLINR3 36150 .br;Draw a line to a 3-D relative coordinate. 36200 .S; CALL VLINR3(DX,DY,DZ) 36250 .s; inputs- DX: 36300 .br; DY: 36350 .br; DZ: 36400 .s; outputs- N/C 36450 .s 2;Draw a line from the current position to the new current 36500 position: 36550 .BR; CP=(CPX+DX,CPY+DY,CPZ+DZ) 36600 .s 4 36650 ** 36700 .br 36750 ^&VLNSA2 VLNSA2\& 36800 .INDEX VLNSA2 36850 .br;Poly-line draw of 2-D absolute coordinates. 36900 .S; CALL VLNSA2(XARR,YARR,N) 36950 .s; inputs- XARR: 37000 .br; YARR: 37050 .br; N: number of vectors to be drawn 37100 .s; outputs- N/C 37150 .s 2;Draw a vector from the current position to 37200 (XARR(1),YARR(1),CPZ). Draw successive vectors to each 37250 (XARR(i),YARR(i),CPZ) in order. Upon completion 37300 the new current position will be: 37350 .br; CP=(XARR(N),YARR(N),CPZ) 37400 .s 4 37450 ** 37500 .br 37550 ^&VLNSA3 VLNSA3\& 37600 .INDEX VLNSA3 37650 .br;Poly-line draw of 3-D coordinates. 37700 .S; CALL VLNSA3(XARR,YARR,ZARR,N) 37750 .s; inputs- XARR: 37800 .BR; YARR: 37850 .BR; ZARR: 37900 .BR; N: number of vectors to be drawn 37950 .s; outputs- N/C 38000 .s 2;Draw from the current position to (XARR(1),YARR(1),ZARR(1)). 38050 From there , draw to each successive (XARR(i),YARR(i),ZARR(i)). 38100 the final current position will be: 38150 .br; CP=(XARR(N),YARR(N),ZARR(N)) 38200 .s 4 38250 ** 38300 .br 38350 ^&VLNSR2 VLNSR2\& 38400 .INDEX VLNSR2 38450 .br;Poly-line draw of 2-d relative vectors. 38500 .S; CALL VLNSR2(DXARR,DYARR,N) 38550 .s; inputs- DXARR: 38600 .BR; DYARR: 38650 .BR; N: number of vectors to be drawn 38700 .s; outputs- N/C 38750 .s 2;Poly-line draw of n 2-D vectors. First vector is 38800 drawn from the current position to : 38850 .br; (CPX+DXARR(1),CPY+DYARR(1),CPZ) 38900 .br;Each successive vector is drawn relative to the last. The 38950 final current position will be: 39000 .br; CPX=CPX+DXARR(1)+...+DXARR(N) 39050 .BR; CPY=CPY+DYARR(1)+...+DYARR(N) 39100 .BR; CPZ=CPZ 39150 .s 4 39200 ** 39250 .br 39300 ^&VLNSR3 VLNSR3\& 39350 .INDEX VLNSR3 39400 .br;Poly-line draw of 3-D relative vectors. 39450 .S; CALL VLNSR3(DXARR,DYARR,DZARR,N) 39500 .s; inputs- DXARR: 39550 .BR; DYARR: 39600 .BR; DZARR: 39650 .BR; N: number of vectors to be drawn 39675 .s 2; outputs- N/C 39700 .s 2;Draw n vectors in 3-D relative mode. Draw the first vector 39750 from thr current position to: 39800 .br; (CPX+DXARR(1),CPY+DYARR(1),CPZ+DZARR(1)) 39850 .br;Draw each successive vector relative to the last one drawn. 39900 The final current position will be: 39950 .br; CPX=CPX+DXARR(1)+...+DXARR(N) 40000 .BR; CPY=CPY+DYARR(1)+...+DYARR(N) 40050 .BR; CPZ=CPZ+DZARR(1)+...+DZARR(N) 40100 .s 4 40150 ** 40200 .br 40250 ^&VMDINT VMDINT\& 40300 .INDEX VMDINT 40350 .br;Set maximum intensity of display. 40400 .S; CALL VMDINT(RINT) 40450 .s; inputs- RINT: intensity range from 0. to 1. 40500 .s; outputs- N/C 40550 .s 2;Overide the default maximum intensity of .5 . 40600 .s 4 40650 ** 40700 .br 40750 ^&VMODE VMODE\& 40800 .INDEX VMODE 40850 .br;Set attributes. 40900 .S; CALL VMODE('CHSZ',ICHS) 40950 .BR; CALL VMODE('CHFO',IFNT) 41000 .BR; CALL VMODE('CHPL',IORI) 41050 .BR; CALL VMODE('STYLE',LINTYP) 41100 .BR; CALL VMODE('PICID',GRPN) 41150 .BR; CALL VMODE('HILIT',IONOF) 41200 .s; inputs- ICHS: 0=120 columns by 60 lines 41250 .br; 1=80 col by 40 lines 41300 .br; 2=60 col by 30 lines 41350 .br; 3=30 col by 15 lines 41400 .br; 4=N/C 41450 .br; IFNT: 0=N/C 41500 .br; 1=normal 41550 .br; 2=not used 41600 .br; 3=slant 41650 .br; IORI: 0=N/C 41700 .br; 1=N/C 41750 .br; 2=N/C 41800 .br; 3=N/C 41850 .br; 4=no rotation 41900 .br; 5=90 deg. ccw 41950 .br; 6=180 deg. ccw 42000 .br; 7=270 deg. ccw 42050 .br; LINTYP: 0=N/C 42100 .br; 1=solid 42150 .br; 2=long dash 42200 .br; 3=short dash 42250 .br; 4=long/short dash 42300 .br; 5=long/short/short 42350 .br; 6=point 42400 .br; GRPN: dbl prec. group name (8 chars) 42450 .br; IONOF: 0=N/C 42500 .br; 1=N/C 42550 .br; 2=off 42600 .br; 3=on 42650 .s; ouputs- N/C 42700 .s 2;Set attributes for character size, font, orientation, vector 42750 line style, group name for picking, and highlighting (blink). 42800 .s 4 42850 ** 42900 .br 42950 ^&VMOVA2 VMOVA2\& 43000 .INDEX VMOVA2 43050 Position beam with 2-D absolute coordinates. 43100 .S; CALL VMOVA2(X,Y) 43150 .s; inputs- X: 43200 .br; Y: 43250 .s; outputs- N/C 43300 .s 2;VMOVA2 positions the beam without drawing to the new 43350 current position: 43400 .br; CP=(X,Y,CPZ) 43450 .s 4 43500 ** 43550 .br 43600 ^&VMOVA3 VMOVA3\& 43650 .INDEX VMOVA3 43700 .br;Position beam with 3-D absolute coordinates. 43750 .S; CALL VMOVA3(X,Y,Z) 43800 .s; inputs- X: 43850 .br; Y: 43900 .br; Z: 43950 .s; outputs- N/C 44000 .s2;VMOVA3 positions the beam without drawing to the new 44050 current position: 44100 .br; CP=(X,Y,Z) 44150 .s 4 44200 ** 44250 .br 44300 ^&VMOVR2 VMOVR2\& 44350 .INDEX VMOVR2 44400 .br;Position the beam with 2-D relative coordinates. 44450 .S; CALL VMOVR2(DX,DY) 44500 .s; inputs- DX: 44550 .br; DY: 44600 .s; outputs- N/C 44650 .s2;VMOVR2 positions the beam without drawing to the new 44700 current position: 44750 .br; CP=(CPX+DX,CPY+DY,CPZ) 44800 .s 4 44850 ** 44900 .br 44950 ^&VMOVR3 VMOVR3\& 45000 .INDEX VMOVR3 45050 .br;Position the beam with 3-D relative coordinates. 45100 .S; CALL VMOVR3(DX,DY,DZ) 45150 .s; inputs- DX: 45200 .br; DY: 45250 .br; DZ: 45300 .s; outputs- N/C 45350 .s 2;VMOVR3 positions the beam without drawing to the new 45400 current position: 45450 .br; CP=(CPX+DX,CPY+DY,CPZ+DZ) 45500 .s 4 45550 ** 45600 .br 45650 ^&VMRKA2 VMRKA2\& 45700 .INDEX VMRKA2 45750 .br;Output a point at a 2-D coordinate. 45800 .S; CALL VMRKA2(X,Y) 45850 .s; inputs- X: 45900 .br; Y: 45950 .s; outputs- N/C 46000 .s 2;VMRKA2 outputs a point at the new current position: 46050 .br; CP=(X,Y,CPZ) 46100 .s 4 46150 ** 46200 .br 46250 ^&VMRKA3 VMRKA3\& 46300 .INDEX VMRKA3 46350 .br;Output a point using 3-D absolute coordinates. 46400 .S; CALL VMRKA3(X,Y,Z) 46450 .s; inputs- X: 46500 .br; Y: 46550 .br; Z: 46600 .s; outputs- N/C 46650 .s 2;VMRKA3 outputs a point at the new current position: 46700 .br; CP=(X,Y,Z) 46750 .s 4 46800 ** 46850 .br 46900 ^&VOPOBJ VOPOBJ\& 46950 .INDEX VOPOBJ 47000 .br;Re-open object. 47050 .S; CALL VOPOBJ(ONAME) 47100 .s; inputs- ONAME: 8 char object name 47150 .s; outputs- N/C 47200 .s 2;Re-open object so that more items can be added to it. 47250 .s 4 47300 ** 47350 .br 47400 ^&VOPSEG VOPSEG\& 47450 .INDEX VOPSEG 47500 .br;Re-open segment. 47550 .S; CALL VOPSEG(SNAME) 47600 .s; inputs- SNAME: 8 char segment name 47650 .s; outputs- N/C 47700 .s 2;Re-open segment so that items can be added . 47750 .s 4 47800 ** 47850 .br 47900 ^&VPAG00 VPAG00\& 47950 .INDEX VPAG00 48000 .br;Reset page settings and output text. 48050 .S; CALL VPAG00(TEXT) 48100 .s; inputs- text: 48150 .s; outputs- N/C 48200 .s 2;Reset left margin and top of page to maximum screen and 48250 then output text string. No automatic carriage control is done 48300 if line overflows, but carriage return character is honored. CP is set to next available character position, but carriage return character is honored. 48350 .s 4 48400 ** 48450 .br 48500 ^&VPAGXY VPAGXY\& 48550 .INDEX VPAGXY 48600 .S; CALL VPAGXY(XLEFT,YTOP,TEXT) 48650 .s; inputs- XLEFT: left margin in WCS 48700 .br; YTOP: top of page in WCS (Y) 48750 .br; text: 48800 .s; outputs- N/C 48850 .s 2;Set left margin and top of page and then output text. No 48900 carriage control is done for lines that overflow, but carriage retun character is honored. CP is left 48950 at next available character position. 49000 .s 4 49050 ** 49100 .br 49150 ^&VPOSN VPOSN\& 49200 .INDEX VPOSN 49250 .br;Initialize registers for cubic draw. 49300 .S; CALL VPOSN(XB,YB,ZB,DXB,DYB,DZB) 49350 .s; inputs- XB: X beginning (WCS) 49400 .br; YB: Y beginning (WCS) 49450 .br; ZB: Z beginning (WCS) 49500 .br; DXB: X slope at beginning 49550 .br; DYB: Y slope at beginning 49600 .br; DZB: Z slope at beginning 49650 .s; outputs- N/C 49700 .s 2;Set up the current X,Y,Z and slope registers for the 49750 CUBIC call. CP is set to (XB,YB,ZB). 49800 .s 4 49850 ** 49900 .br 49950 ^&VRDDEV VRDDEV\& 50000 .INDEX VRDDEV 50050 .br;Read GPU and hardware locations. 50100 .S; CALL VRDDEV(N,IDEVAD,IVALS) 50150 .s; inputs- N: number of locations 50200 .br; IDEVAD: array of device addresses (n) 50250 .br; IVALS: array of size n 50300 .s; outputs- N: N/C 50350 .br; IDEVAD: N/C 50400 .br; IVALS: array of values read 50450 .s 2;Read N device addresses putting their values into IVALS. 50500 .s 4 50550 ** 50600 .br 50650 ^&VRECT VRECT\& 50700 .INDEX VRECT 50750 .br;Draw a rectangle. 50800 .S; CALL VRECT(XO,YO) 50850 .s; inputs- XO: X opposite (WCS) 50900 .br; YO: Y opposite (WCS) 50950 .s; outputs- N/C 51000 .s 2;Draw a rectangle using CP as the lower left corner and 51050 (XO,YO) as the opposite, upper right corner. CP is 51100 unchanged. 51150 .s 4 51200 ** 51250 .br 51300 ^&VSEANG VSEANG\& 51350 .br;Set maximum rotation angle range. 51400 .INDEX VSEANG 51450 .S; CALL VSEANG(ANG) 51500 .s; inputs- ANG: rotation range in degrees 51550 .s; outputs- N/C 51600 .s 2;Declare range of angles for rotation. The maximum and 51650 default is ANG=180. for a range of (-180.,180.). 51700 .s4 51750 ** 51800 .br 51850 ^&VSEDEP VSEDEP\& 51900 .INDEX VSEDEP 51950 .br;Declare front and back software clipping planes. 52000 .S; CALL VSEDEP(FRONT,BACK) 52050 .s; inputs- FRONT: front z clip plane in WCS 52100 .br; BACK: back z clip plane in WCS 52150 .s; outputs- N/C 52200 .s 2;Declare front and back z clipping planes (software). The 52250 default is (1.,0.). 52300 .s 4 52350 ** 52400 .br 52450 ^&VSEL VSEL\& 52500 .INDEX VSEL 52550 .br;Select monitor. 52600 .S; CALL VSEL (MON) 52650 .s; inputs- MON: monitor 0-7 52700 .s; outputs- N/C 52750 .s 2;Select monitor. Can be used to control visibility 52800 of segments in conjunction with VDSL. 52850 .s 4 52900 ** 52950 .br 53000 ^&VSETDM VSETDM\& 53050 .INDEX VSETDM 53100 .br;Set GPU operating mode. 53150 .S; CALL VSETDM(ICMD,ICTRL) 53200 .s; inputs- ICMD: GPU command register value 53250 .br; ICTRL: GPU control register value 53300 .s; outputs- N/C 53350 .s 2;Alter GPU command and control registers. 53400 .s 4 53450 ** 53500 .br 53550 ^&VSETE VSETE\& 53600 .INDEX VSETE 53650 .br;Set echo. 53700 .S; CALL VSETE(ICL,IDV,IONOF) 53750 .s; inputs- ICL: class 53800 .br; IDV: device 53850 .br; IONOFF: logical variable (.true.=on) 53900 .s; outputs- N/C 53950 .s 2;Set echo for a particular device within a class. For example, 54000 blink item that is picked by lightpen. 54050 .s 4 54100 ** 54150 .br 54200 ^&VSETPK VSETPK\& 54250 .INDEX VSETPK 54300 .br;Setup lightpen as pick. 54350 .S; CALL VSETPK(PMODE,IDV,INSTNC) 54400 .s; inputs- PMODE: 'ANY' for any 54450 .br; 'ON' for any when switch on 54500 .br; '1STON', 1st hit after swith on 54550 .br; 'OFF' for turning off 54600 .br; IDV: pick device number 54650 .br; INSTNC: instance number 54700 .s; outputs- N/C 54750 .s 2;Set up pick parameters for lightpen. Hits can be detected 54800 when the switch is first pressed, any time the switch is pressed, 54850 and regardless of the switch state. 54900 .s 4 54950 ** 55000 .br 55050 ^&VSEWND VSEWND\& 55100 .INDEX VSEWND 55150 .br;Declare software x-y window. 55200 .S; CALL VSEWND(XL,XH,YL,YH) 55250 .s; inputs- XL: lower left X WCS coordinate 55300 .br; XH: upper right (high) X coordinate 55350 .br; YL: lower left Y WCS coordinate 55400 .br; YH: upper right Y WCS coordinate 55450 .s; outputs- N/C 55500 .s 2;Declare software WCS boundaries for x-y window. The 55550 user space is a cube: MIN(XL,YL,BACK) and MAX(XH,YH,FRONT). 55600 .s 4 55650 ** 55700 .br 55750 ^&VSTOP VSTOP\& 55800 .INDEX VSTOP 55850 .br;Stop GPU. 55900 .S; CALL VSTOP 55950 .s 2;Stop the update processing mode of the GPU. The 56000 previous image generated will continue to be displayed. 56050 .s 4 56100 ** 56150 .br 56200 ^&VTDEPQ VTDEPQ\& 56250 .INDEX VTDEPQ 56300 .br;Hardware depth cueing. 56350 .S; CALL VTDEPQ(RINT,DIST) 56400 .s; inputs- RINT: intensity range (0. to 1.) 56450 .br; DIST: 1/distance from eye to FRONT (WCS) 56500 .s; outputs- N/C 56550 .s 2;Enable depth cueing (close vectors are brighter) to give the 56600 illusion of depth. DIST controls perspective (0. is orthogonal). 56650 .s 4 56700 ** 56750 .br 56800 ^&VTDXYZ VTDXYZ\& 56850 .INDEX VTDXYZ 56900 .br;Dispacement. 56950 .S; CALL VTDXYZ(DX,DY,DZ) 57000 .s; inputs- DX: X displacement (WCS) 57050 .br; DY: Y displ (WCS) 57100 .br; DZ: Z displ (WCS) 57150 .s; outputs- N/C 57200 .s 2;Declare displacement (translation) of subsequent 57250 items. 57300 .s 4 57350 ** 57400 .br 57450 ^&VTEXT VTEXT\& 57500 .INDEX VTEXT 57550 .br;Output text at CP. 57600 .S; CALL VTEXT(TEXT) 57650 .s; inputs- text: 57700 .s; outputs- N/C 57750 .s 2;Output text string using CP as temporary left margin and top 57800 margin . Subsequent lines will return to preset left margins. No 57850 automatic line-feeds or carriage returns are done at line overflow. 57875 Carriage return characters are honored. 57900 CP is set to next available character position. 57950 .s 4 58000 ** 58050 .br 58100 ^&VTMARK VTMARK\& 58150 .INDEX VTMARK 58200 .br;Hardware mark. 58250 .S; CALL VTMARK 58300 .s 2;Mark stack with a GMARK. This protects GPU's stack. 58350 It remains in effect until a POP (see VTPOP) or a return 58400 GPU instruction that is issued when the object that caused the 58450 GMARK returns. 58500 .s 4 58550 ** 58600 .br 58650 ^&VTPOP VTPOP\& 58700 .INDEX VTPOP 58750 .S; CALL VTPOP 58800 .s 2;Pop GPU stack up to and including first GMARK (see 58850 VTMARK) encountered in the graphic stack. 58900 .s 4 58950 ** 59000 .br 59050 ^&VTRMLU VTRMLU\& 59100 .INDEX VTRMLU 59150 .br;Terminate FGP. 59200 .S; CALL VTRMLU(LUN) 59250 .s; inputs- lun: lun from VINILU call 59300 .s; outputs- N/C 59350 .s 2;VTRMLU terminates the FGP package. 59400 .s 4 59450 ** 59500 .br 59550 ^&VTRX VTRX\& 59600 .INDEX VTRX 59650 .br;Hardware X rotation. 59700 .S; CALL VTRX(RX) 59750 .s; inputs- RX: X rotatation (WCS) 59800 .s; outputs- N/C 59850 .s 2;Set hardware X rotation register. 59900 .s 4 59950 ** 60000 .br 60050 ^&VTRXYZ VTRXYZ\& 60100 .INDEX VTRXYZ 60150 .br;X,Y, and Z hardware rotation 60200 .S; CALL VTRXYZ(RX,RY,RZ) 60250 .s; inputs- RX: X rot in degrees (WCS) 60300 .br; RY: Y rot in degrees (WCS) 60350 .br; RZ: Z rot in degrees (WCS) 60400 .s; outputs- N/C 60450 .s 2 60500 Set hardware X, Y, Z rotation registers. 60600 .s 4 60650 ** 60700 .br 60750 ^&VTRY VTRY\& 60800 .INDEX VTRY 60850 .br;Y hardware rotation 60900 .S; CALL VTRY(RY) 60950 .s; inputs: RY: Y rot in degrees (WCS) 61000 .s; outputs- N/C 61050 .s 2;Set hardware Y rotation register. 61100 .s 4 61150 ** 61200 .br 61250 ^&VTRZ VTRZ\& 61300 .INDEX VTRZ 61350 .br;Z hardware rotation 61400 .S; CALL VTRZ(RZ) 61450 .s; inputs: RZ: Z rot in degrees (WCS) 61500 .s; outputs- N/C 61550 .s 2;Set hardware Z rotation register. 61600 .s 4 61650 ** 61700 .br 61750 ^&VTS VTS\& 61800 .INDEX VTS 61850 .br;Hardware scale. 61900 .S; CALL VTS(S) 61950 .s; inputs- S: scale (WCS) 0. to 1. 62000 .s; outputs- N/C 62050 .s 2;Set hardware object scale register. 62100 .s 4 62150 ** 62200 .br 62250 ^&VTVIEW VTVIEW\& 62300 .INDEX VTVIEW 62350 .br;Viewport. 62400 .S; CALL VTVIEW(PCX,PCY,PS) 62450 .s; inputs- PCX: X pic center (WCS) 62500 .br; PCY: Y pic center (WCS) 62550 .br; PS: picture scale (WCS) 62600 .s; outputs- N/C 62650 .s 2;Hardware viewport is defined by picture center (PCX,PCY) 62700 and size (PS). 62750 .s 4 62800 ** 62850 .br 62900 ^&VTWNDO VTWNDO\& 62950 .INDEX VTWNDO 63000 .br;Hardware window. 63050 .S; CALL VTWNDO(XC,YC,XS,YS,ZN,ZS) 63100 .s; inputs- XC: X center (WCS) 63150 .br; YC: Y center (WCS) 63200 .br; XS: X size (WCS) 63250 .br; YS: Y size (WCS) 63300 .br; ZN: Z near (WCS) 63350 .br; ZS: Z size (WCS) 63400 .s; outputs- N/C 63450 .s 2;Hardware window is defined by the center (XC,YC), 63500 its size (XS,YS,ZS) and its near point (front) in Z plane 63550 (ZN). 63600 .s 4 63650 ** 63675 .br 63700 ^&VWAIT VWAIT\& 63750 .INDEX VWAIT 63800 .br;Wait for an event. 63850 .S; CALL VWAIT(ITIME,ICL,IDV) 63900 .s; inputs- ITIME: max time to wait for an event 63950 .s; outputs- ICL: class generating first event 64000 .br; IDV: device generating first event 64050 .s 2;Wait for an event. If ITIME=0 no wait will occur; a 64100 previously occurring event (if any) will be dequeued. If no 64150 event occurs (or has previously occurred), ICL=0. Note, the wait is 64200 for the first event of any enabled class/device, not for a 64250 particular one. 64300 .s 4 64350 ** 64400 .br 64450 ^&VWRDEV VWRDEV\& 64500 .INDEX VWRDEV 64550 .br;Write GPU or hardware registers. 64600 .S; CALL VWRDEV(N,IDEVADS,IVALS) 64650 .s; inputs- N: number of locations 64700 .br; IDEVADS: array of N device addresses 64750 .br; IVALS: array of N values 64800 .s; outputs- N/C 64850 .s 2;Write N GPU or hardware registers with values. 64900 .s 4 64950 ** 64952 .page 64954 .index Program loading 64956 4.##^&PROGRAM LOADING\& 64958 .s 2 64960 4.1##^&Simple\&#-#The simplest method is to use the task 64961 .index Simple Program Loading 64962 build indirect command file, LB1:[1,2]BLD, specifying 64964 yes (Y) for VG support and no () for non-standard 64966 VG. The indirect command file will load the necessary 64968 routines and data blocks from the FGP library and assign 64970 lun 3 to GS:. 64972 .s 2 64974 .index Non-standard Load 64976 4.2##^&Non-standard load\&#-#The default display list is 2000 64978 (decimal) words and is located in module VGMEM. Users who 64980 supply their own VGMEM or who desire to use a different lun 64982 assignment than 3 for GS: should say yes (Y) to the non- 64984 standard VG query. BLD will then ask what lun assignment and 64986 whether you are supplying VGMEM. 64988 .s 4 64990 .index Errors 64992 5.##^&ERRORS\& 64994 .s 2 64996 Currently, an error message file is available at AGL. Ask 64998 staff. 65000 .br 65050 .page 65100 .c; INDEX 65150 .px 65200