1*-----------------------------------------------------------------------
2*     Copyright (C) 2000-2004 GFD Dennou Club. All rights reserved.
3*-----------------------------------------------------------------------
4      SUBROUTINE UVBXFZ(N,UPX,UPY1,UPY2,ITYPE,INDEX)
5
6      REAL      UPX(*),UPY1(*),UPY2(*)
7
8      LOGICAL   LMISS, LXUNI, LYC1, LYC2
9      CHARACTER COBJ*80
10
11      COMMON    /SZBLS2/ LCLIP
12      LOGICAL   LCLIP
13
14
15      IF (N.LT.1) THEN
16        CALL MSGDMP('E','UVBXFZ','NUMBER OF POINTS IS LESS THAN 1.')
17      END IF
18      IF (ITYPE.EQ.0) THEN
19        CALL MSGDMP('M','UVBXFZ','LINE TYPE IS 0 / DO NOTHING.')
20        RETURN
21      END IF
22      IF (INDEX.EQ.0) THEN
23        CALL MSGDMP('M','UVBXFZ','LINE INDEX IS 0 / DO NOTHING.')
24        RETURN
25      END IF
26      IF (INDEX.LT.0) THEN
27        CALL MSGDMP('E','UVBXFZ','LINE INDEX IS LESS THAN 0.')
28      END IF
29
30      CALL SGLGET('LCLIP' , LCLIP )
31      CALL GLRGET('RUNDEF', RUNDEF)
32      CALL GLRGET('RMISS' , RMISS)
33      CALL GLLGET('LMISS' , LMISS)
34
35      WRITE(COBJ,'(2I8)') ITYPE, INDEX
36      CALL CDBLK(COBJ)
37      CALL SWOOPN('UVBXFZ',COBJ)
38
39      CALL SZSIDX(INDEX)
40      CALL SZSTYP(ITYPE)
41
42      LXUNI = UPX(1).EQ.RUNDEF
43      LYC1  = UPY1(1).EQ.RUNDEF
44      LYC2  = UPY2(1).EQ.RUNDEF
45
46      IF (LXUNI) THEN
47        CALL UUQIDV(UXMIN, UXMAX)
48        IF (UXMIN.EQ.RUNDEF) CALL SGRGET('UXMIN', UXMIN)
49        IF (UXMAX.EQ.RUNDEF) CALL SGRGET('UXMAX', UXMAX)
50        DX = (UXMAX-UXMIN)/N
51      END IF
52
53      IF (LYC1 .OR. LYC2) THEN
54        CALL UURGET('UREF', UREF)
55      END IF
56
57      DO 20 I=1,N
58        IF (LXUNI) THEN
59          UX1 = UXMIN + DX*(I-1)
60          UX2 = UXMIN + DX*I
61        ELSE
62          UX1 = UPX(I)
63          UX2 = UPX(I+1)
64        END IF
65
66        IF (LYC1) THEN
67          UY1 = UREF
68        ELSE
69          UY1 = UPY1(I)
70        END IF
71
72        IF (LYC2) THEN
73          UY2 = UREF
74        ELSE
75          UY2 = UPY2(I)
76        END IF
77
78        IF (.NOT.
79     #    ((UX1.EQ.RMISS .OR. UX1.EQ.RMISS .OR.
80     #      UY1.EQ.RMISS .OR. UY2.EQ.RMISS) .AND. LMISS)) THEN
81
82          CALL SZOPLU
83          CALL SZMVLU(UX1, UY2)
84          CALL SZPLLU(UX2, UY2)
85          CALL SZPLLU(UX2, UY1)
86          CALL SZPLLU(UX1, UY1)
87          CALL SZPLLU(UX1, UY2)
88          CALL SZCLLU
89
90        END IF
91   20 CONTINUE
92
93      CALL SWOCLS('UVBXFZ')
94
95      END
96