.MACRO $CGI .MCALL $VPL, $VINI, $VVE, $VDV, $VMPC, $VPVS .MCALL $VTRM, $VSLT, $VSLW, $VSLC, $VQTS, $VQDT .MCALL $VTP, $VTA, $VCO, $VCH, $VCEF, $VCS .MCALL $VTXT, $VTC, $VPM, $VMT, $VMS, $VMC .MCALL $VRD, $VFAC, $VFAI, $VP, $VCT, $VESC LST$$ = 1 .ENDM ; ; $VINI ; WS is a number, CHAN is an address. ; .MACRO $VINI WS,CHAN PUSH R0,R1 ; Save R0 and R1. MOV #WSSBVC-2,R0 ; Pointer to the subroutine vector list. ADD WS,R0 ; Use workstation # as an index. ADD WS,R0 MOV @R0,R0 ; Get the start address of the vector table. MOV CHAN,-(SP) ; Save the I/O channel number. MOV SP,R1 ; Save its address. CALL @$$VINI(R0),R1 ; Execute the workstation function. TST (SP)+ ; Remove the channel # from the stack. POP R1,R0 ; Restore R1 and R0. .ENDM ; ; $VPL ; WS is a number, P1 is the number of points and P2 is the address of the ; normalized, clipped points. ; .MACRO $VPL WS,P1,P2 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VPL(R0),P1,P2; Execute the workstation function. .ENDM ; ; $VVE ; WS is a number, P1 and P2 are addresses. ; .MACRO $VVE WS,P1,P2 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VVE(R0),P1,P2; Execute the workstation function. .ENDM ; ; $VDV ; WS is a number, P1 and P2 are addresses. ; .MACRO $VDV WS,P1,P2 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VDV(R0),P1,P2; Execute the workstation function. .ENDM ; ; $VMPC ; WS is a number. ; .MACRO $VMPC WS .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VMPC(R0) ; Make Picture Current. .ENDM ; ; $VPVS ; WS is a number. ; .MACRO $VPVS WS .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VPVS(R0) ; Prepare View Surface. .ENDM ; ; $VTRM ; WS is a number. ; .MACRO $VTRM WS .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VTRM(R0) ; Prepare View Surface. .ENDM ; ; $VSLT ; WS is a number. ; .MACRO $VSLT WS,LINTYP .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VSLT(R0),LINTYP ; Set Line Type. .ENDM ; ; $VSLW ; WS is a number. ; .MACRO $VSLW WS,LINWID .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VSLW(R0),LINWID ; Set Line Width. .ENDM ; ; $VSLC ; WS is a number. ; .MACRO $VSLC WS,LINCOL .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VSLC(R0),LINCOL ; Set Line Colour. .ENDM ; ; $VQTS ; WS is a number. ; .MACRO $VQTS WS .IF DIF ,R0 .EMIT .ENDC .EMIT .EMIT .ENDM ; ; $VQDT ; WS is a number. ; .MACRO $VQDT WS,WSDT .IF DIF ,R0 .EMIT .ENDC .EMIT .EMIT .ENDM ; ; $VTP ; WS is a workstation number (1-N). ; ATP is the address of the text path ; .MACRO $VTP WS,ATP .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VTP(R0),ATP ; Set the Text Path .ENDM ; ; $VTA ; WS is a workstation number (1-N). ; AHA is the address of the horizontal alignment ; AVA is the address of the vertical alignment ; ACHA is not used in this implementation ; ACVA is not used in this implementation ; .MACRO $VTA WS,AHA,AVA,ACHA,ACVA .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VTA(R0),AHA,AVA,ACHA,ACVA ; Set the Text Alignment. .ENDM ; ; $VCO ; WS is a workstation number (1-N). ; AXCU is the address of the X Character Up component ; AYCU is the address of the Y Character Up component ; AXCB is the address of the X Character Base component ; AYCB is the address of the Y Character Base component ; .MACRO $VCO WS,AXCU,AYCU,AXCB,AYCB .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VCO(R0),AXCU,AYCU,AXCB,AYCB ; Set the Character Orientation .ENDM ; ; $VCH ; WS is a workstation number (1-N). ; ACH is the address of the Character Height ; .MACRO $VCH WS,ACH .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VCH(R0),ACH ; Set the Character Orientation .ENDM ; ; $VCEF ; WS is a workstation number (1-N). ; ACEF is the address of the Character Expansion Factor ; .MACRO $VCEF WS,ACEF .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VCEF(R0),ACEF; Set the Character Expansion Factor .ENDM ; ; $VCS ; WS is a workstation number (1-N). ; ACS is the address of the Character Spacing ; .MACRO $VCS WS,ACS .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VCS(R0),ACS ; Set the Character Spacing. .ENDM ; ; $VTXT ; WS is a workstation number (1-N). ; POSITION is the character string reference point. ; DUMMY is a dummy argument. ; STRING is a pointer to the character string. ; .MACRO $VTXT WS,POSITION,DUMMY,STRING .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VTXT(R0),POSITION,DUMMY,STRING ; Render the string. .ENDM ; ; $VTC ; WS is a workstation number (1-N). ; COLOUR is the requested text colour. ; .MACRO $VTC WS,COLOUR .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VTC(R0),COLOUR ; Select the text colour. .ENDM ; ; $VPM ; WS is a number, P1 and P2 are addresses. ; .MACRO $VPM WS,P1,P2 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VPM(R0),P1,P2; Execute the workstation function. .ENDM ; ; $VMT ; WS is a number, P1 is an address. ; .MACRO $VMT WS,P1 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VMT(R0),P1 ; Execute the workstation function. .ENDM ; ; $VMS ; WS is a number, P1 is an address. ; .MACRO $VMS WS,P1 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VMS(R0),P1 ; Execute the workstation function. .ENDM ; ; $VMC ; WS is a number, P1 is an address. ; .MACRO $VMC WS,P1 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VMC(R0),P1 ; Execute the workstation function. .ENDM ; ; $VRD - Reset Defaults ; WS is a number. ; .MACRO $VRD WS .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VRD(R0) ; Execute the workstation function. .ENDM ; ; $VFAC ; WS is a number, P1 is an address. ; .MACRO $VFAC WS,P1 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VFAC(R0),P1 ; Execute the workstation function. .ENDM ; ; $VFAI ; WS is a number, P1 is an address. ; .MACRO $VFAI WS,P1 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VFAI(R0),P1 ; Execute the workstation function. .ENDM ; ; $VP ; WS is a number, F1 is a flag, P1 is the number of points and P2 is the ; address of the normalized, clipped points. ; .MACRO $VP WS,P1,P2,F1 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VP(R0),P1,P2,F1; Execute the workstation function. .ENDM ; ; $VCT ; WS is a number, I1 is an index, P1, P2 and P3 are colour values. ; .MACRO $VCT WS,I1,P1,P2,P3 .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VCT(R0),I1,P1,P2,P3; Execute the workstation function. .ENDM ; ; $VESC ; WS is a number. ; .MACRO $VESC WS .IF DIF ,R0 MOV WS,R0 ; Put the workstation number in R0. .ENDC JSR PC,G$TV ; Get a pointer to the Transfer Vector in R0. CALL @$$VESC(R0) ; Execute the workstation function. .ENDM