1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
C
C
C +-----------------------------------------------------------------+
C | |
C | Copyright (C) 1986 by UCAR |
C | University Corporation for Atmospheric Research |
C | All Rights Reserved |
C | |
C | NCARGRAPHICS Version 1.00 |
C | |
C +-----------------------------------------------------------------+
C
C
C ---------------------------------------------------------------------
C
SUBROUTINE AGKURV (XVEC,IIEX,YVEC,IIEY,NEXY,SVAL)
C
DIMENSION XVEC(1),YVEC(1)
C
C AGKURV plots the curve defined by the points ((X(I),Y(I)),I=1,NEXY),
C where
C
C X(I)=XVEC(1+(I-1)*IIEX) (unless IIEX=0, in which case X(I)=I), and
C Y(I)=YVEC(1+(I-1)*IIEY) (unless IIEY=0, in which case Y(I)=I).
C
C If, for some I, X(I)=SVAL or Y(I)=SVAL, curve line segments having
C (X(I),Y(I)) as an endpoint are omitted.
C
C No windowing is performed.
C
C Check first whether the number of curve points is properly specified.
C
IF (NEXY.LE.0) GO TO 901
C
C Initialization. Pretend that the last point was point number zero.
C Set the indices for the x and y vectors accordingly. Clear the line-
C drawn-to-last-point flag.
C
INDP=0
INDX=1-IIEX
INDY=1-IIEY
LDLP=0
C
C Initialization. Retrieve the current curve window, user window, and
C x/y linear/logarithmic flags.
C
CALL GETSET (XLCW,XRCW,YBCW,YTCW,XLUW,XRUW,YBUW,YTUW,LTYP)
C
C Initialization. Set linear/log flag and linear-window limits for
C x-axis values.
C
IF (LTYP.EQ.1.OR.LTYP.EQ.2) THEN
LLUX=0
XLLW=XLUW
XRLW=XRUW
ELSE
LLUX=1
XLLW=ALOG10(XLUW)
XRLW=ALOG10(XRUW)
END IF
C
C Initialization. Set linear/log flag and linear-window limits for
C y-axis values.
C
IF (LTYP.EQ.1.OR.LTYP.EQ.3) THEN
LLUY=0
YBLW=YBUW
YTLW=YTUW
ELSE
LLUY=1
YBLW=ALOG10(YBUW)
YTLW=ALOG10(YTUW)
END IF
C
C Initialization. Call SET, if necessary, to define a linear mapping.
C
IF (LTYP.NE.1)
+ CALL SET (XLCW,XRCW,YBCW,YTCW,XLLW,XRLW,YBLW,YTLW,1)
C
C Beginning of loop through points. Update indices and determine the
C user-space coordinates of the next point.
C
101 IF (INDP.EQ.NEXY) GO TO 102
INDP=INDP+1
C
INDX=INDX+IIEX
XNXT=XVEC(INDX)
IF (IIEX.EQ.0) XNXT=FLOAT(INDP)
IF (LLUX.NE.0.AND.XNXT.LE.0.) XNXT=SVAL
C
INDY=INDY+IIEY
YNXT=YVEC(INDY)
IF (IIEY.EQ.0) YNXT=FLOAT(INDP)
IF (LLUY.NE.0.AND.YNXT.LE.0.) YNXT=SVAL
C
C Check whether (XNXT,YNXT) is a special-value point. Handle that case.
C
IF (XNXT.EQ.SVAL.OR.YNXT.EQ.SVAL) THEN
IF (LDLP.EQ.0) GO TO 101
IF (LDLP.EQ.1) CALL VECTD (XLST,YLST)
CALL LASTD
LDLP=0
GO TO 101
END IF
C
C If user space is not linear/linear, modify XNXT and YNXT accordingly.
C
IF (LLUX.NE.0) XNXT=ALOG10(XNXT)
IF (LLUY.NE.0) YNXT=ALOG10(YNXT)
C
C Start or continue line.
C
IF (LDLP.EQ.0) THEN
CALL FRSTD (XNXT,YNXT)
XLST=XNXT
YLST=YNXT
ELSE
CALL VECTD (XNXT,YNXT)
END IF
C
LDLP=LDLP+1
GO TO 101
C
C Last point was final point. Finish up.
C
102 IF (LDLP.NE.0) THEN
IF (LDLP.EQ.1) CALL VECTD (XLST,YLST)
CALL LASTD
END IF
C
C Restore logarithmic mapping, if appropriate.
C
IF (LTYP.NE.1)
+ CALL SET (XLCW,XRCW,YBCW,YTCW,XLUW,XRUW,YBUW,YTUW,LTYP)
C
C Return to caller.
C
RETURN
C
C Error exit.
C
901 CALL SETER ('AGKURV - NUMBER OF POINTS IS LESS THAN OR EQUAL TO ZE
+RO',3,2)
C
END
|