Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
8.1 KiB

2 years ago
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
C NTESS, the U.S. Government retains certain rights in this software.
C
C See packages/seacas/LICENSE for details
C=======================================================================
SUBROUTINE UGRCOL (INDX, BLKCOL)
C=======================================================================
C --*** UGRCOL *** (BLOT) Set color (PLT)
C -- Written by John Glick - 11/29/88
C --
C --UGRCOL is similar to the GRCOLR routine of GRPLIB in that it
C --sets the color of lines depending on the passed index.
C --The colors are chosen differently than GRCOLR, however.
C --If appropriate, the BLKCOL array is used to select the color.
C --
C --
C --Parameters:
C -- INDX - IN - the color index or block id:
C -- If = -1, black is chosen as the color.
C -- If = 0, the foreground color is chosen as the color.
C -- If the foreground color is not available on
C -- the current device, white is chosen.
C -- If > 0, it is assumed to be an element block identifier.
C -- If BLKCOL(INDX) > -2, then BLKCOL(INDX) is the
C -- color index chosen (if it is a supported color on
C -- the current device).
C -- BLKCOL - IN - the user selected colors of the element blocks.
C -- BLKCOL(0) = 1 if the user defined material
C -- colors should be used in mesh plots.
C -- = -1 if program selected colors should
C -- not be used.
C -- BLKCOL(i) = the user selected color of element
C -- block i:
C -- -2 - no color selected by user.
C -- -1 - black
C -- 0 - white
C -- 1 - red
C -- 2 - green
C -- 3 - yellow
C -- 4 - blue
C -- 5 - cyan
C -- 6 - magenta
C --
C --Common Variables:
C -- Uses ICURDV, MAXCOL, NUMCOL, MAPUSE of /GRPCOM/
C --Routines Called:
C -- PLTICL - (PLTLIB) Get color index from name
C -- PLTSTD - (PLTLIB) Set device parameter
C -- 1 = (KCOLOR) set color
C -- PLTSTG - (PLTLIB) Set graph parameter
C -- 6 = (KCOLIN) set line color for PLTGRH lines
C -- 44 = (KCOSYM) set symbol color for PLTGRH lines
PARAMETER (KCOLOR=1)
PARAMETER (KCOLIN=6, KCOSYM=44)
COMMON /GRPCOC/ DEVNAM(2), DEVCOD(2)
CHARACTER*3 DEVNAM
CHARACTER*8 DEVCOD
COMMON /GRPCOM/ ICURDV, ISHARD, DEVOK(2), TALKOK(2),
& NSNAP(2), IFONT(2), SOFTCH(2), AUTOPL(2),
& MAXCOL(2), NUMCOL(0:1,2), MAPALT(2), MAPUSE(2)
LOGICAL ISHARD, DEVOK, TALKOK, SOFTCH, AUTOPL
include 'dbnums.blk'
include 'grcol.blk'
COMMON /BCOLR/ BCOLCH
LOGICAL BCOLCH
include 'plcol2.blk'
include 'params.blk'
include 'cmap-lst.blk'
INTEGER LSTD2
SAVE LSTD2
INTEGER INDX
INTEGER BLKCOL(0:NELBLK)
LOGICAL LDUM, PLTSTG, PLTSTD, PLTICL
LOGICAL COLSPC(NCOLOR)
INTEGER NUMFRE, FRECOL(NCOLOR)
SAVE COLSPC, NUMFRE, FRECOL
CHARACTER*8 BLCOLR, WHCOLR
SAVE BLCOLR, WHCOLR
DATA LSTD2 / 0 /
DATA BLCOLR, WHCOLR / 'BLACK ', 'WHITE ' /
IF (ICURDV .NE. LSTDEV) THEN
LSTDEV = ICURDV
LSTMAP = 0
C --Reset last color
LSTCOL = -999
C --Set device black and white
IF (MAXCOL(ICURDV) .GT. 0) THEN
LDUM = PLTICL (WHCOLR, RWHITE)
IWHITE = INT(RWHITE)
LDUM = PLTICL (BLCOLR, RBLACK)
IBLACK = INT(RBLACK)
ELSE
IBLACK = 0
IWHITE = 1
END IF
ELSE IF (MAPUSE(ICURDV) .NE. LSTMAP) THEN
C --Reset last color
LSTCOL = -999
LSTMAP = MAPUSE(ICURDV)
ENDIF
IF (ICURDV .NE. LSTD2) THEN
C Get mapping of colors
DO 100 I = 1, NCOLOR
IF (PLTICL (COLLST(I+2), RCOLOR)) THEN
COLMAP(I) = RCOLOR
ELSE
COLMAP(I) = -1
ENDIF
100 CONTINUE
ENDIF
IF (BCOLCH .OR. (ICURDV .NE. LSTD2)) THEN
BCOLCH = .FALSE.
DO 110 I = 1, NCOLOR
COLSPC(I) = .FALSE.
110 CONTINUE
IF (BLKCOL(0) .EQ. 1) THEN
DO 120 I = 1, NELBLK
IF ((BLKCOL(I) .GT. 0) .AND.
& (COLMAP(BLKCOL(I)) .NE. -1))
& COLSPC(BLKCOL(I)) = .TRUE.
120 CONTINUE
ENDIF
NUMFRE = 0
DO 130 I = 1, NCOLOR
IF ((.NOT. COLSPC(I)) .AND. (COLMAP(I) .NE. -1)) THEN
NUMFRE = NUMFRE + 1
FRECOL(NUMFRE) = I
ENDIF
130 CONTINUE
ENDIF
IF (ICURDV .NE. LSTD2) LSTD2 = ICURDV
NCOL = NUMCOL(MAPUSE(ICURDV),ICURDV)
IF (BLKCOL(0) .EQ. 1) THEN
IF (INDX .EQ. -1) THEN
ICOLOR = IBLACK
ELSE IF (INDX .EQ. 0) THEN
IDFORT = IDFOR
IF (IDFOR .EQ. 1) THEN
ICOLOR = IBLACK
ELSE IF (IDFOR .EQ. 2) THEN
ICOLOR = IWHITE
ELSE IF (COLMAP(IDFOR-2) .GE. 0.0) THEN
ICOLOR = INT(COLMAP(IDFOR-2))
ELSE
ICOLOR = IWHITE
IDFORT = 2
ENDIF
COLFOR = REAL (ICOLOR)
ELSE IF ((BLKCOL(INDX) .GT. 0) .AND.
& (COLMAP(BLKCOL(INDX)) .NE. -1)) THEN
ICOLOR = INT(COLMAP(BLKCOL(INDX)))
ELSE IF (BLKCOL(INDX) .EQ. 0) THEN
ICOLOR = IWHITE
ELSE IF (BLKCOL(INDX) .EQ. -1) THEN
ICOLOR = IBLACK
ELSE
IF (NUMFRE .GT. 0) THEN
NBLNSP = 0
DO 140 I = 1, INDX
IF (BLKCOL(I) .EQ. -2) THEN
NBLNSP = NBLNSP + 1
ELSE IF (BLKCOL(I) .GT. 0) THEN
IF (COLMAP(BLKCOL(I)) .EQ. -1) THEN
NBLNSP = NBLNSP + 1
ENDIF
ENDIF
140 CONTINUE
ICOLOR = INT(COLMAP (FRECOL(MOD (NBLNSP-1, NUMFRE)+1)))
ELSE
IDFORT = IDFOR
IF (IDFOR .EQ. 1) THEN
ICOLOR = IBLACK
ELSE IF (IDFOR .EQ. 2) THEN
ICOLOR = IWHITE
ELSE IF (COLMAP(IDFOR-2) .GE. 0.0) THEN
ICOLOR = INT(COLMAP(IDFOR-2))
ELSE
ICOLOR = IWHITE
IDFORT = 2
ENDIF
COLFOR = REAL (ICOLOR)
ENDIF
ENDIF
ELSE
IF ((INDX .GT. 0) .AND. (NCOL .GT. 0)) THEN
C ... This is a temporary kludge by GDS for Ultrix -
ICOLOR = MOD (INDX-1, NCOL) +1
C ICOLOR = MOD (INDX-1, NCOL)
IF (MAPUSE(ICURDV) .EQ. 0) THEN
IF (ICOLOR .GE. IBLACK) ICOLOR = ICOLOR + 1
IF (ICOLOR .GE. IWHITE) ICOLOR = ICOLOR + 1
IF (ICOLOR .GT. IBLACK .AND.
& ICOLOR .LT. IWHITE) ICOLOR = INT(COLMAP(ICOLOR))
ELSE
ICOLOR = ICOLOR + (6 + 2)
END IF
ELSE IF (INDX .EQ. -1) THEN
ICOLOR = IBLACK
ELSE
IDFORT = IDFOR
IF (IDFOR .EQ. 1) THEN
ICOLOR = IBLACK
ELSE IF (IDFOR .EQ. 2) THEN
ICOLOR = IWHITE
ELSE IF (COLMAP(IDFOR-2) .GE. 0.0) THEN
ICOLOR = INT(COLMAP(IDFOR-2))
ELSE
ICOLOR = IWHITE
IDFORT = 2
ENDIF
COLFOR = REAL (ICOLOR)
END IF
ENDIF
IF (ICOLOR .NE. LSTCOL) THEN
LDUM = PLTSTD (KCOLOR, REAL (ICOLOR))
LDUM = PLTSTG (KCOLIN, REAL (ICOLOR))
LDUM = PLTSTG (KCOSYM, REAL (ICOLOR))
LSTCOL = ICOLOR
END IF
RETURN
END