1C*GRLEN -- inquire plotted length of character string
2C+
3      SUBROUTINE GRLEN (STRING, D)
4C
5C GRPCKG: length of text string (absolute units)
6C--
7C (3-Mar-1983)
8C 19-Jan-1988 - remove unused label [TJP].
9C  9-Sep-1989 - standardize [TJP].
10C-----------------------------------------------------------------------
11      INCLUDE 'grpckg1.inc'
12      LOGICAL UNUSED
13      INTEGER XYGRID(300)
14      INTEGER LIST(256)
15      CHARACTER*(*) STRING
16      REAL FACTOR, COSA, SINA, DX, D, RATIO, FNTBAS, FNTFAC
17      INTEGER I, IFNTLV, LX, NLIST
18      INTRINSIC ABS, LEN
19C
20      D = 0.0
21      IF (LEN(STRING).LE.0) RETURN
22C-----------------------------------------------------------------------
23C               Compute scaling and orientation
24C-----------------------------------------------------------------------
25      FACTOR = GRCFAC(GRCIDE)/2.5
26      RATIO = GRPXPI(GRCIDE)/GRPYPI(GRCIDE)
27      COSA = FACTOR
28      SINA = 0.0
29      FNTBAS = 0.0
30      FNTFAC = 1.0
31      IFNTLV = 0
32C
33C               Convert string to symbol numbers:
34C               \u and \d escape sequences are converted to -1,-2
35C
36      CALL GRSYDS(LIST,NLIST,STRING,GRCFNT(GRCIDE))
37C
38C               Plot the string of characters
39C
40      DO 380 I = 1,NLIST
41          IF (LIST(I).LT.0) THEN
42              IF (LIST(I).EQ.-1) THEN
43                  IFNTLV = IFNTLV+1
44                  FNTBAS = FNTBAS + 16.0*FNTFAC
45                  FNTFAC = 0.6**ABS(IFNTLV)
46              ELSE IF (LIST(I).EQ.-2) THEN
47                  IFNTLV = IFNTLV-1
48                  FNTFAC = 0.6**ABS(IFNTLV)
49                  FNTBAS = FNTBAS - 16.0*FNTFAC
50              END IF
51              GOTO 380
52          END IF
53          CALL GRSYXD(LIST(I),XYGRID,UNUSED)
54          LX = XYGRID(5)-XYGRID(4)
55          DX = COSA*LX*RATIO
56          D = D + DX*FNTFAC
57  380 CONTINUE
58C
59      END
60