INTERFACE TO SUBROUTINE J06ZHK [C] (FONTNM, FONTSZ,LCOL,NCOL) CHARACTER*(*) FONTNM REAL*4 FONTSZ [REFERENCE] LOGICAL LCOL [REFERENCE] INTEGER*4 NCOL [REFERENCE] END INTERFACE TO SUBROUTINE J06ZHL [C] (STR,X,Y,ROT) CHARACTER*(*) STR REAL*4 X [REFERENCE] REAL*4 Y [REFERENCE] REAL*4 ROT [REFERENCE] END SUBROUTINE J06YHF(ACHAR,N1) C NAG GRAPHICS LIBRARY, MARK 4 RELEASE. NAG COPYRIGHT 1994. C C NAG Graphical Interface - Inventor - double to single precision C --------------------------------------------------------------- C C The N characters stored in CHARACTER*1 format in ACHAR are output. C Each character is drawn inside a conceptual character box with C lower left-hand corner at the cp. Its width and height are C specified by the routine J06YKF. The orientation of the box is C determined by the direction of the text path specified by routine C J06YTF, if the angled text flag has been set. The default is C horizontal text. C C The current point is updated to a new position determined C by routine J06YLF. C This permits concatenation of subsequent characters. C C The set of characters available is the pfort character set.. C ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-+=*/(),. and blank. C C .. Scalar Arguments .. INTEGER N1 C .. Array Arguments .. CHARACTER ACHAR(N1) C .. Scalars in Common .. DOUBLE PRECISION CHSCAL, COSA, DX, DX1, DY, DY1, RH, RW, SINA, * XNFAC, XNFAC1, YNFAC, YNFAC1, ZGAMSC, ZGCHT, * ZGCPX, ZGCPY, ZGCSCH, ZGCSCW, ZGCSPX, ZGCSPY, * ZGCWD, ZGCX, ZGCY, ZGMSZ, ZGTPX, ZGTPY, ZGXD, * ZGXHIH, ZGXLOW, ZGXMAX, ZGXMIN, ZGYD, ZGYHIH, * ZGYLOW, ZGYMAX, ZGYMIN INTEGER NGCOL, NGCQU, NGFONT, NGFSTL, NGIHAT, NGIPEN, * NGLSTL, NGMARG, NGTOLF LOGICAL ATFLAG, LCHDEF, LCOLOR, LMKDEF, LMSZAF, ZGXDIR, * ZGYDIR C .. Arrays in Common .. DOUBLE PRECISION COLB(2,17), COLG(2,17), COLR(2,17) INTEGER NGPEN(4,3) CHARACTER*26 FNTLST(15) C .. Local Scalars .. DOUBLE PRECISION SQRPXY, UX1, UY1, XDIRX, XHIH, XLOW, YDIRY, * YHIH, YLOW REAL FONTSZ, ROT1 INTEGER FONTLN, I, N, NERR CHARACTER*2 CHR CHARACTER*26 FONTNM C .. Local Arrays .. CHARACTER*80 OUTREC(2) C .. External Subroutines .. EXTERNAL J06VAF, J06YBF, J06ZHK, J06ZHL, X04BAF C .. External Functions .. DOUBLE PRECISION J06YAW, J06YAX INTEGER J06ZUF EXTERNAL J06YAW, J06YAX, J06ZUF C .. Intrinsic Functions .. INTRINSIC ATAN2, MAX, MIN, REAL, SQRT C .. Common blocks .. COMMON /AJ06WB/ZGXLOW, ZGXHIH, ZGYLOW, ZGYHIH COMMON /AJ06XA/ZGXMIN, ZGXMAX, ZGYMIN, ZGYMAX, NGMARG COMMON /AJ06YH/ATFLAG COMMON /BJ06XA/ZGCSCW, ZGCSCH, ZGAMSC, NGPEN, NGTOLF, * NGCQU COMMON /BJ06YA/NGCOL, NGLSTL, NGFONT, NGFSTL, NGIHAT COMMON /CJ06XA/ZGMSZ, ZGCWD, ZGCHT, ZGCSPX, ZGCSPY, * ZGCPX, ZGCPY, NGIPEN COMMON /EJ06ZH/DX, DY, ZGCX, ZGCY, XNFAC, YNFAC, DX1, * DY1, SINA, COSA, XNFAC1, YNFAC1 COMMON /FJ06XA/ZGTPX, ZGTPY, LCHDEF, LMKDEF, LMSZAF COMMON /FJ06ZH/RW, RH COMMON /KJ06ZH/CHSCAL COMMON /XJ06XA/ZGXD, ZGYD, ZGXDIR, ZGYDIR COMMON /YJ06XA/COLR, COLG, COLB, LCOLOR COMMON /ZJ06ZA/FNTLST C .. Save statement .. SAVE /AJ06WB/, /AJ06XA/, /AJ06YH/, /BJ06XA/, * /BJ06YA/, /CJ06XA/, /EJ06ZH/, /FJ06XA/, * /FJ06ZH/, /KJ06ZH/, /XJ06XA/, /YJ06XA/, /ZJ06ZA/ C .. Executable Statements .. C C If character size is not defined, output message and ignore call C IF ( .NOT. LCHDEF) THEN CALL J06VAF(0,NERR) WRITE (OUTREC,FMT=99999) DO 20 I = 1, 2 CALL X04BAF(NERR,OUTREC(I)) 20 CONTINUE ELSE C C Basic character spacing C DX1 = ZGCSPX*ZGCSCW DY1 = ZGCSPY*ZGCSCH C C If ATFLAG true override default text path direction C IF (ATFLAG) THEN XDIRX = 1.0D0 YDIRY = 1.0D0 ELSE XDIRX = ZGXD YDIRY = ZGYD END IF C C If the angled text flag is set calculate angles C IF (ATFLAG) THEN UX1 = ZGTPX*(ZGYMAX-ZGYMIN) UY1 = ZGTPY*(ZGXMAX-ZGXMIN) ROT1 = REAL(ATAN2(UY1,UX1)) C C Calculate real angle for spacing of characters C SQRPXY = SQRT(ZGTPX*ZGTPX+ZGTPY*ZGTPY) SINA = ZGTPY/SQRPXY COSA = ZGTPX/SQRPXY C C Character spacing after transformation C DX = DX1*COSA - DY1*SINA DY = DX1*SINA + DY1*COSA ELSE ROT1 = 0.0 C DX = DX1 DY = DY1 END IF C C Text font C FONTNM = FNTLST(NGFONT) FONTLN = J06ZUF(FONTNM) FONTSZ = REAL(RH*YNFAC*CHSCAL) CALL J06ZHK(FONTNM(1:FONTLN)//CHAR(0),FONTSZ,LCOLOR,NGCOL) C C Draw one character at a time (80 characters maximum) C Ensure that the character is drawn inside the data region C N = MIN(N1,80) XLOW = MIN(ZGXLOW,ZGXHIH) XHIH = MAX(ZGXLOW,ZGXHIH) YLOW = MIN(ZGYLOW,ZGYHIH) YHIH = MAX(ZGYLOW,ZGYHIH) DO 40 I = 1, N IF (ZGCPX.GE.XLOW .AND. ZGCPX.LE.XHIH .AND. * ZGCPY.GE.YLOW .AND. ZGCPY.LE.YHIH) THEN CHR(1:1) = ACHAR(I) CHR(2:2) = CHAR(0) CALL J06ZHL(CHR,REAL(J06YAX(ZGCPX)),REAL(J06YAW(ZGCPY)), * ROT1) END IF CALL J06YBF(DX*XDIRX,DY*YDIRY) 40 CONTINUE END IF LMSZAF = .FALSE. RETURN C 99999 FORMAT (' Warning - Character height and/or width is not defined', * '...',/' ...Call of J06YHF ignored') END